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

8

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

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"];

我想从objectArray中减去每个元素,如果在normalArray中有匹配的ID。然后,我想通过对象的值(最小值在前)对新创建的数组进行排序。
因此,对于上面的示例,结果将是:
var newObjectArray = [{id_3:"200"},
                      {id_1:"300"}];

是否可以不使用jQuery来完成这个操作?

我看到了类似的问题,比如:如果基于值的话,从一个数组中删除另一个数组中存在的对象,但我还没有找到一个可行的答案。是否可以进行比较并删除,同时保持键值对的完整性?感谢您提前为此提供的任何帮助!


3
由于jQuery是用JS编写的,因此在JS中没有jQuery也可以实现一切。 - Mitya
@Emily,我的解决方案对你有用吗? - Mihai Alexandru-Ionut
2个回答

5

你应该使用 filter 方法,它接受一个回调函数作为参数。

此外,你还需要使用 Object.keys() 方法来获取 objectArray 中每个 object 的键。

要检查来自 objectArrayelement 是否未出现在 objectArray 中,你应该使用 indexOf() 方法。

要实现排序后的 sorted 数组,你必须使用 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);


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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接