javascript - 查找数组对象的值差异

标签 javascript lodash

我有两个数组,它们都由随机键和值组成。我有一个更新的对象和当前对象。但更新后的对象包含新值和旧值。我想找到这两个对象键和值之间的差异,以使用新键或值生成新的更新对象。

当前对象

{
  key1: "abc"
  key2: "ggg"
  key3: 0,
  key4: ["1","3","5"]
  key5: [1,2,3,4,5]
  key6: [9,8,7,6],
  key7: false
}

更新对象

{
  key1: "abc"
  key2: "new"
  key3: 30,
  key4: ["1","3","5"]
  key5: [2,3,4]
  key6: [],
  key7: true,
  special8: [1,2,3]
}

结果

{
  key2: "new"
  key3: 30,
  key5: [2,3,4]
  key6: [],
  key7: true,
  special8: [1,2,3]
}

最佳答案

根据您的条件:以下 reduce() 函数将每个更新的对象的属性与每个当前对象的属性进行比较并返回一个包含差异的全新对象。

请注意:使用 !== 简单地浅比较字符串数组(例如您的 key4 属性)可能会返回漏报,因此使用 JSON .stringify().

// Current Object.
const current = {
  key1: "abc",
  key2: "ggg",
  key3: 0,
  key4: ["1","3","5"],
  key5: [1,2,3,4,5],
  key6: [9,8,7,6],
  key7: false
}

// Updated Object.
const updated = {
  key1: "abc",
  key2: "new",
  key3: 30,
  key4: ["1","3","5"],
  key5: [2,3,4],
  key6: [],
  key7: true,
  special8: [1,2,3]
}

// Difference Object.
const difference = (Object.keys(updated)).reduce((difference, key) => {

  // Same?
  if (JSON.stringify(updated[key]) == JSON.stringify(current[key])) return difference 

  // Different.
  return {...difference, [key]: updated[key]}

}, {})

console.log(difference)

关于javascript - 查找数组对象的值差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47171159/

相关文章:

javascript - 使用javascript中的时间对象更新日期对象中的日期

javascript - 荒野市区谷歌地图如何运作?

javascript - 如何在下拉列表中启用多个条件?

node.js - Heroku 找不到模块 'lodash/object/assign'

functional-programming - 如何使用Lodash Flow了解 curry 和功能成分?

javascript - react-cookie 无法设置过期或 maxAge

javascript - JQuery:当值已知时如何获取选择的名称?

javascript - 如何在 lodash 的嵌套函数中调用父函数?

javascript - Lodash - 变量声明后可以继续链接吗?

javascript - lodash orderby 部分排序