一个数组的成员是对象,如何判断是否具有某个对象?

var a =[{id:1},{id:2},{name:'cc'}];
var b = {id:1};

怎么判断a中是否有b一样的对象? 如果不用循环的话有什么好的方法吗?

阅读 13.8k
6 个回答
var a =[{id:1},{id:2},{name:'cc'}];
var b = {id:1};

console.log(JSON.stringify(a).indexOf(JSON.stringify(b))!=-1);

非常trick的方法,把数组和对象全转成string, 然后使用string.indexOf判断是否存在

没有,不过你可以写个Array的扩展方法
但是不循环的话应该是没有办法做到

新手上路,请多包涵

自己定义对象的equal方法(也是要用到for遍历属性,如果属性是Object,要用到递归判断,还有原型上的属性也要考虑是否相等),网上有很多,可以直接拷过来用,数组是否包含,在循环里面调你定义的equal方法去判断是否包含。

要用遍历方式获取

去看lodash的 _.find 或 _.contain 或 _.include 的源码。看人家怎么做的。怎么是最优的做法。

循环数组,比较数组元素中各个属性和对象的各个属性是否相等。不过如果属性多了就不是好方法了。

推荐问题
宣传栏