如何确定对象是否在数组中

这个问题在这里已经有了答案:

  • 如何检查数组是否包含JavaScript中的对象? 40个答案

  • 使用这样的东西:

    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?