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

JavaScript: Best way to find if a value is inside an object in an array

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Find object by id in an array of JavaScript objects
How to check if value exists in this JavaScript array?

例如:

1
2
3
4
5
6
7
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??


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

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

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

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

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

1
2
3
4
5
6
7
var index = 0;
for(; index<arr.length; index++) {
    if(arr[index].color == 'blue') {
        break;
    }
}
alert(index)


1
2
3
4
5
6
7
8
9
10
11
12
13
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');
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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"; }

非常糟糕的方法:

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

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