javascript - 比较两个数组的内容

标签 javascript ramda.js

我需要比较两个对象数组(源/目标)的内容。

如果源中的项目在目标中不存在,我应该只添加项目以包含。

如果源中的项目确实存在于目标中,我应该只添加项目以排除。

目前正在使用 ramda R.differenceWith() 但当目标为空时出现问题。

我想知道 differenceWith 是否适合这里的海豚,或者我可以使用其他函数。请提供示例谢谢!

注意:即使不使用 ramda 也可以回答。

Demo

// source
  const pathHash1 = {
    hash: "c4ca4238a0b923820dcc509a6f75849b",
    path: "./source/file1.txt"
  };
  const pathHash2 = {
    hash: "c81e728d9d4c2f636f067f89cc14862c",
    path: "./source/file2.txt"
  };
  const pathHash3 = {
    hash: "eccbc87e4b5ce2fe28308fd9f2a7baf3",
    path: "./souce/file3.txt"
  };
  // target
  const pathHash4 = {
    hash: "eccbc87e4b5ce2fe28308fd9f2a7baf3",
    path: "./target/file3.txt"
  };

// works
// const source = [pathHash1, pathHash2, pathHash3]
// const target = [pathHash4]

// does no work
const source = [pathHash1, pathHash2, pathHash3]
const target = []

// result pathHash1, pathHash2
const resultInclude = R.differenceWith((x,y)=> x.hash === y.hash, source, target)
const resultExclude= R.differenceWith((x,y)=> x.hash !== y.hash, source, target)

console.log('include',resultInclude.map(x=>x.hash))
console.log('exclude',resultExclude.map(x=>x.hash))

最佳答案

使用R.innerJoin对于排除情况:

const getInclude = R.differenceWith(R.eqProps('hash'))
const getExclude = R.innerJoin(R.eqProps('hash'))

const pathHash1 = {hash: "c4ca4238a0b923820dcc509a6f75849b",path: "./source/file1.txt"},pathHash2 = {hash: "c81e728d9d4c2f636f067f89cc14862c",path: "./source/file2.txt"},pathHash3 = {hash: "eccbc87e4b5ce2fe28308fd9f2a7baf3",path: "./souce/file3.txt"},pathHash4 = {hash: "eccbc87e4b5ce2fe28308fd9f2a7baf3",path: "./target/file3.txt"}

const source1 = [pathHash1, pathHash2, pathHash3]
const target1 = [pathHash4]

const source2 = [pathHash1, pathHash2, pathHash3]
const target2 = []

const getHash = R.map(R.prop('hash'))

console.log('include1', getHash(getInclude(source1, target1)))
console.log('exclude1', getHash(getExclude(source1, target1)))

console.log('include2', getHash(getInclude(source2, target2)))
console.log('exclude2', getHash(getExclude(source2, target2)))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>

关于javascript - 比较两个数组的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971098/

相关文章:

javascript - 无法让 Sprite 贴图在三个 js 中正常工作

javascript - 尝试创建 React 应用程序时出现 Yarn 错误

javascript - Jquery - 如何使这段代码工作? (从另一个网站提取信息)

javascript - 你能给我一个如何使用 Ramda lift 的例子吗?

ramda.js - 更新几个属性

ramda.js - 使用 Ramda 简化数组计算

javascript - AngularJS 中的单元测试 - 模拟服务和 promise

条件满足时的 Javascript 重定向

javascript - 为什么民间故事和 lambda 如此不同?

javascript - Ramda,数组相等而不考虑顺序