开发者问题收集

使用特定 ID 在 javascript 中比较两个数组

2018-02-12
5368

我正在寻找一种更干净、更有效的 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])
    }
  }
}

小提琴

我们可以做得更好吗?

谢谢!

2个回答

从 array1 创建一个 id 数组,然后根据前一个 id 数组 .filter 对数组 2 进行过滤;

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);
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);
void
2018-02-12

您可以按如下方式使用 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);
});
Hussam Kurd
2018-02-12