比较javascript中具有特定ID的两个数组

时间:2018-02-12 11:09:01

标签: javascript arrays

我正在寻找一个更清洁,更有效的javascript解决方案来比较两个阵列并创建第三个阵列。

所以我有两个数组:

var array1 = [
    [{
    id: 1,
    enabled: false

  }],
  [{
    id: 2,
    enabled: true,
  }],
  [{
    id: 10,
    enabled: false
  }]
]

var array2 = [
    {
    id_from_array1: 10,
    data: true
  },
  {
    id_from_array1: 20,
    data: false
  },
  {
    id_from_array1: 1,
    data: true
  }
]

我想从第二个数组中提取第一个数组中不存在的ID,所以现在我的解决方案是创建一个带有双循环的第三个数组来比较前两个数组的值:

var array3 = [];

for (var i = 0; i < array2.length; i++) {
  for (var y = 0; y < array1.length; y++) {
      if (array2[i].id_from_array1 === array1[y][0].id) {
        array3.push(array2[i])
    }
  }
}

the fiddle

我们可以做得更好吗?

THX!

2 个答案:

答案 0 :(得分:2)

从array1创建一个id数组,然后根据以前的id数组创建数组2 .filter;

var ids = array1.map( el => el[0].id );
ids = Array.from(new Set(ids)); // Get unique ids as set are always unique
var array3 = array2.filter( el => ids.indexOf(el.id_from_array1)!==-1);
console.log(array3);

&#13;
&#13;
var array1 = [
    [{
    id: 1,
    enabled: false

  }],
  [{
    id: 2,
    enabled: true,
  }],
  [{
    id: 10,
    enabled: false
  }]
]

var array2 = [
    {
    id_from_array1: 10,
    data: true
  },
  {
    id_from_array1: 20,
    data: false
  },
  {
    id_from_array1: 1,
    data: true
  }
];

var ids = array1.map( el => el[0].id );
var array3 = array2.filter( el => ids.indexOf(el.id_from_array1)!==-1);
console.log(array3);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用find功能,如下所示:

var array3 = [];
array2.find(function(element1) {
  var matched = array1.find(function(element2) {
    return element2[0].id == element1.id_from_array1;
  });
  if (matched != null) array3.push(matched);
});