如果元素基于值存在于另一个数组中,则过滤数组

时间:2017-02-17 11:56:16

标签: javascript arrays

我有一个像这样的对象数组:

var objectArray = [{id_5:"100"},
                   {id_1:"300"},
                   {id_2:"500"},
                   {id_4:"700"},
                   {id_3:"200"}];

像这样的普通数组:

var normalArray = ["id_2","id_5","id_4"];

如果normalArray中有匹配的ID,我想从objectArray中减去每个元素。然后我想按对象的值排序新创建的数组(最低值是第一个)。

因此,对于上面的示例,结果将是:

var newObjectArray = [{id_3:"200"},
                      {id_1:"300"}];

没有jQuery可以做到这一点吗?

我见过类似这样的问题:Removing object from one array if present in another array based on value但我还没有找到合适的答案。是否可以进行比较和删除,同时仍然保持键:值对完好无损?提前感谢您对此的任何帮助!

2 个答案:

答案 0 :(得分:3)

您应该使用filter方法,该方法接受callback函数作为参数。

此外,您必须使用Object.keys()方法才能获取object中每个objectArray的密钥。

要检查来自element的{​​{1}}是否未显示在objectArray中,您应该使用indexOf()方法。

要实现objectArray数组,您必须使用sort()方法。

sorted

答案 1 :(得分:1)

您可以先使用filter()从其他数组中删除带有键的对象,然后排序以按对象值对结果数组进行排序。

var objectArray = [{id_5:"100"},{id_1:"300"},{id_2:"500"},{id_4:"700"},{id_3:"200"}];
var normalArray = ["id_2","id_5","id_4"];

var newArray = objectArray
  .filter(e => !normalArray.includes(Object.keys(e)[0]))
  .sort((a, b) => a[Object.keys(a)[0]] - b[Object.keys(b)[0]])
  
console.log(newArray)