【问题标题】:How to get an items that already exists in 2 array如何获取2个数组中已经存在的项目
【发布时间】:2018-03-27 12:19:48
【问题描述】:

我有 2 个数组,如下所示。

我想保持数组 2 的“id”不存在于数组 1 中。

数组 1

{"list":{"0":{"category":"Cat fr 1","list":{"0":{"id":123123123123},"1":{"id":123123123123}

数组 2

{"list":{"0":{"category":"Cat fr 1","list":{"0":{"id":123123123123},"1":{"id":123123123123}, "1":{"category":"Cat fr 2","list":{"0":{"id":123123123123},"1":{"id":123123123123},"2":{"类别":"猫 fr 3","list":{"0":{"id":123123123123},"1":{"id":123123123123}

结果

{"list":{"1":{"category":"Cat fr 2","list":{"0":{"id":123123123123},"1":{"id":123123123123}, "2":{"category":"Cat fr 3","list":{"0":{"id":123123123123},"1":{"id":123123123123}

【问题讨论】:

  • 可以使用下划线库(求差法):underscorejs.org/#difference
  • 这可以给你一些方向:stackoverflow.com/questions/1187518/…
  • 哪个键代表您给定的数组中的 id?也分享你的尝试。
  • 那些“数组”是嵌套对象。这些数组怎么样?
  • 你能解释一下你是如何决定你的result的吗?因为array1array2中的所有id都一样?

标签: javascript html arrays json


【解决方案1】:

var array1=jQuery.parseJSON('{"list":{"0":{"category":"Cat fr 1","list":{"0":{"id":123123123123},"1":{"id":123123123123}}}}}');

var array2=jQuery.parseJSON('{"list":{"0":{"category":"Cat fr 1","list":{"0":{"id":123123123123},"1":{"id":123123123123}}},"1":{"category":"Cat fr 2","list":{"0":{"id":123123123123},"1":{"id":123123123123}}},"2":{"category":"Cat fr 3","list":{"0":{"id":123123123123},"1":{"id":123123123123}}}}}');

var list1=array1["list"];
var list2=array2["list"];
var checkArray=[];
var result={};
for (var key in list1) {
  if (list1.hasOwnProperty(key)) {
    var val = list1[key];
    checkArray.push(val["category"]);
  }
}
for (var key in list2) {
  if (list2.hasOwnProperty(key)) {
    var val = list2[key];
    if(!checkArray.includes(val["category"]))
    {
      result[key]=val;
    }
  }
}
var finalResult={};
finalResult["list"]=result;
console.log(JSON.stringify(finalResult));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

  • 它的工作!非常感谢。非常感谢您帮我解决问题
【解决方案2】:

您可以将filter()array2 与findIndex() 组合成一个新数组(或返回到array2 或array1)。

let array1 = [ {
    "id": 1,
    "name": "one"
}, {
    "id": 2,
    "name": "two"
} ];
let array2 = [ {
    "id": 1,
    "name": "one"
}, {
    "id": 2,
    "name": "two"
}, {
    "id": 3,
    "name": "three"
}, {
    "id": 4,
    "name": "four"
} ];

let newArray = array2.filter( ( item ) => {
    return array1.findIndex( ( _item ) => item.id == _item.id ) == -1;
} );
console.table( newArray );
// logs: [ { id: 3, name: "three" }, { id: 4, name: "four" } ]

我认为您可以将其应用于您的数组。

更多解释:
filter() 循环遍历数组中的所有项并返回一个新数组,其中包含通过我们过滤条件的对象。因此,您需要在它之前声明一个新数组,以便您可以将它放在某个地方。 let newArray = ...
findIndex() 返回一个索引,就像 indexOf() 一样,但你可以给它一个条件。在这种情况下,它返回 id 与我们正在过滤的数组中的项目的 id 相同的对象的索引。 item.id == _item.id
当它没有找到任何这样的对象时,它将返回-1。您想将那些返回 -1 的对象放入新数组中。您想将它们“过滤”到新数组中。这就是我们检查它的原因:... == -1

【讨论】:

  • 是的。非常感谢。感谢您的帮助,我注意到了。这对我很有帮助。
猜你喜欢
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多