首页 > 解决方案 > Javascript比较两个JSON数组并返回不匹配值的键

问题描述

我有两个 JSON 数组,想知道不匹配的键。我不需要价值。

例子:

livetable: [
  { id: 1, name: "Sandra" },
  { id: 2, name: "John" },
],
backupTable: [
  { id: 1, name: "Sandra" },
  { id: 2, name: "Peter" },
],

我可以得到与这个 Lodash 脚本不同的键/值对:

difference = _.differenceWith(livetable,backupTable,_.isEqual)

但我只需要密钥,在此示例中,“id: 2”的“名称”不匹配,因此我需要获取新数组/变量的“名称”密钥。

(使用 VUE CLI)

编辑:添加了当前代码输出的示例。

var livetable = [{"id": 1, "name": "Sandra", "id": 2, "name": "John"}]
var backupTable = [{"id": 1, "name": "Sandra", "id": 2, "name": "Peter"}]

console.log(_.differenceWith(backupTable,livetable,_.isEqual))
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>

这将输出键:值对,但我只需要不同的键。

标签: javascriptarraysjsonlodashdifference

解决方案


这是解决我的问题的 VUE 代码。函数返回[ "name" ],这正是我所需要的。

data() {
    return {
      livetable: [{ id: 1, name: "Sandra" },{ id: 2, name: "John" }],
      backupTable: [{ id: 1, name: "Sandra" },{ id: 2, name: "Peter" }],
      difColumns: null,
    };
  },
methods: {
    test3() {
      let resultArray = []
      this.livetable.forEach((array1, index) => {
        const array2 = this.backupTable[index];
        resultArray.push(this._.reduce(array1, (result, value, key) => this._.isEqual(value, array2[key]) ? result : result.concat(key), []))
      });
      this.difColumns = resultArray[0]
    }
},

推荐阅读