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

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

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但是我找不到一个有效的答案.是否可以进行比较和删除,同时仍然保持键:值对完好无损?在此先感谢您对此的任何帮助!

最佳答案
您应该使用filter方法,该方法接受回调函数作为参数.

此外,您必须使用Object.keys()方法才能获取objectArray中每个对象的键.

要检查objectArray中的元素是否未出现在objectArray中,您应该使用indexOf()方法.

要实现排序数组,必须使用sort()方法.

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(function(item){
    return normalArray.indexOf(Object.keys(item)[0]) == -1;
}).sort(function(a,b){
    return a[Object.keys(a)[0]] - b[Object.keys(b)[0]];
});
console.log(newArray);

转载注明原文:javascript – 如果元素基于值存在于另一个数组中,则过滤数组 - 代码日志