JavaScript:查找值是否在数组中的对象内的最佳方法

时间:2011-10-17 11:24:54

标签: javascript arrays object

  

可能重复:
  Find object by id in an array of JavaScript objects
  How to check if value exists in this JavaScript array?

例如:

var arr = [
     {id: 1, color: 'blue'},
     {id: 2, color: 'red'},
     {id: 3, color: 'yellow'}
];

alert( indexOf('blue') ); // How can I get the index of blue??

5 个答案:

答案 0 :(得分:5)

只需循环遍历数组并检查颜色值:

for(var i = 0 ; i < arr.length -1 ; i++){
    if(arr[i].color == 'red'){
        alert(i); 
    }  
}

当然,您可以将其包装在辅助函数中,如下所示:

function colourIndex(colour){
    for(var i = 0 ; i < arr.length -1 ; i++){
        if(arr[i].color == colour){
         return i; 
        }  
    }
}

答案 1 :(得分:3)

found_flag = false;
for (i = 0; i < arr.length; i++) {
    if (arr[i].color == 'blue') {
        found_flag = true;
        break;
    }
}
if (found_flag === true)
{
    alert(i);
} else {
    alert('not found');
}

答案 2 :(得分:3)

您必须迭代数组,搜索蓝色对象。如果你得到它你就有你的索引。

var index = 0;
for(; index<arr.length; index++) {
    if(arr[index].color == 'blue') {
        break;
    }
}
alert(index)

答案 3 :(得分:2)

您可能希望创建更通用的解决方案,而不是在整个地方复制代码

Array.prototype.indexOf = (function() {
    var old = Array.prototype.indexOf ||
        function(v) {
            var i, l = this.length;
            for (i = 0; i < l; ++i) {
                if (this[i] === v) {
                    return i;
                }
            }
            return -1;
        };

        return function(v) {
            var i, l;
            if (typeof v != "function") {
                return old.call( this, v );
            }

            l = this.length;

            for( i = 0; i < l; ++i ) {
                if (v.call( this, this[i])) {
                    return i;
                }
            }
            return -1;
        }
})();

arr.indexOf( function(v){return v.color == "blue";} ); //0

arr.indexOf( function(v){return v.images[0].imageData == "xxx"; }

答案 4 :(得分:1)

非常糟糕的方法:

var ind = -1
$(arr).each(function(index, val){if (val.color=='blue'){ind=index;return false;}});

更好的方法是创建另一个可搜索的价值地图及其索引,或类似的东西。