如何确定对象是否在数组中
这个问题在这里已经有了答案:
使用这样的东西:
function containsObject(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i] === obj) {
return true;
}
}
return false;
}
在这种情况下, containsObject(car4, carBrands)
是真的。 删除carBrands.push(car4);
调用,它将返回false而不是。 如果稍后扩展为使用对象来存储这些其他汽车对象而不是使用数组,则可以使用类似下面的代码:
function containsObject(obj, list) {
var x;
for (x in list) {
if (list.hasOwnProperty(x) && list[x] === obj) {
return true;
}
}
return false;
}
这种方法也适用于数组,但是在阵列上使用时,它比第一种方法慢一点。
为什么不使用javascript数组的indexOf方法?
看看这个:MDN indexOf Arrays
简单地做:
carBrands.indexOf(car1);
它会返回car1的索引(在数组中的位置)。 如果在数组中找不到car1,它将返回-1。
http://jsfiddle.net/Fraximus/r154cd9o
编辑:请注意,在问题中,需求是检查数组中引用的同一对象,而不是新对象 。 即使新对象在内容上与数组中的对象相同,它仍然是一个不同的对象。 正如在注释中提到的, 对象在JS中通过引用传递,并且同一对象可以在多个结构中多次存在。
如果你想创建一个新的对象,并检查数组是否包含与你的新对象相同的对象,这个答案将不起作用(朱利安的小提琴下面),如果你想检查数组中的同一个对象的存在,那么这个答案将工作。 看看这里和评论中的小提琴。
你可以使用jQuery的grep方法:
$.grep(carBrands, function(obj) { return obj.name == "ford"; });
但是当你没有指定jQuery时,你可以做一个函数的派生。 源代码:
function grepArray( elems, callback, inv ) {
var ret = [];
// Go through the array, only saving the items
// that pass the validator function
for ( var i = 0, length = elems.length; i < length; i++ ) {
if ( !inv !== !callback( elems[ i ], i ) ) {
ret.push( elems[ i ] );
}
}
return ret;
}
grepArray(carBrands, function(obj) { return obj.name == "ford"; });
链接地址: http://www.djcxy.com/p/13031.html
上一篇: How to determine if object is in array
下一篇: How to check if a string array contains one string in JavaScript?