根据对象字段值查找javascript“对象数组”的索引

时间:2014-05-09 14:38:03

标签: javascript jquery arrays angularjs

我有一个Javascript对象数组,我想找到数组元素(对象)的索引,其中特定对象的字段与我的搜索条件匹配。

即,数组看起来像

  [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
    {id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}]

我想找到元素的id字段等于的元素的索引,比如说15。 我正在使用角度和jquery。

7 个答案:

答案 0 :(得分:6)

你必须迭代,这是一个非常简单的例子

var index = null;

for (var i=0; i<array.length; i++) {
    if ( array[i].id == 15 ) {
        index = i;
        break;
    }
}

如果您只想返回可以执行的对象

,那么就可以获得索引
var obj = array.filter(function(obj) {
    return obj.id == 15;
}).shift();

答案 1 :(得分:2)

array.filter是实现这一目标的更优雅的方法:

var arrr = [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
{id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}];

return arrr.filter( function( value ){ return value.id == 15; })[0];

答案 2 :(得分:2)

有多种方法可以做到这一点。

您可以遍历数组并进行搜索。

var search = 15;
for(var index=0; index<input.length; index++) {
   if(input[index].id == search) {
       //Do whatever you want to do with this index.
   }
}

或者您可以先创建一个查找

var lookup = {};
for(var index=0; index<input.length; index++) {
   var element = input[index];
   lookup[element.id] = element;
   lookup[element.id].index = index;
}

现在,在搜索术语的每个后续查找中,您都可以执行以下操作

var search = 15;
if(lookup[search]) {
   var index = lookup[search].index;
}

答案 3 :(得分:2)

使用ES6,您可以使用Array#findIndex

  

findIndex() 方法返回数组中第一个满足所提供测试函数的元素的索引。否则返回-1

&#13;
&#13;
var array = [{ id: 1, saved: 0, name: "name1" }, { id: 26, saved: 0, name: "name2" }, { id: 3, saved: 0, name: "name3" }, { id: 15, saved: 0, name: "name4" }],
    index = array.findIndex(({ id }) => id === 15);

console.log(index);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 4 :(得分:0)

试试这个:

$.each(json.yourrootjson, function(i, v) {
    if (v.id == "15") {
        alert(v.id);
        alert(v.name);
        alert(v.saved);
        return;
    }
});

答案 5 :(得分:0)

这是一种非常基本的方法。当然,你不想像我一样静态地使用变量keymatch,但我必须更多地了解你的代码以帮助你。

var array = [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
             {id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}]

var key = 'id';
var match = 15;

array.forEach(function(elem, i) {
    if (elem[key] === match) {
        alert(i);
    }
});

答案 6 :(得分:0)

有很多源,但是while循环似乎是迭代数组的最快方法。或者,在我看来,Array.map()是最干净的方式,但事实证明它相当慢。

Benchmarks

Article on loops

var array = []; // your array
var len = array.length;

while (len-- ) {
  if ( array[i].id == 15 ) {
    console.log(array[i])
  }
}