从数组中获取对象的索引

时间:2013-08-02 19:57:23

标签: javascript jquery

我的数组看起来像这样:

var someArray = 

    [
        { id: 'someID', name: 'someName', title: 'someTitle' },
        { id: 'anotherID', name: 'anotherName', title: 'anotherTitle' },
        { id: 'otherID', name: 'otherName', title: 'otherTitle' }
    ];

我希望得到一个对象的索引引用,该对象是id === 'anotherID'

引用的someArray

我知道我可以使用$.grep()返回一个对象:

var resultArray = $.grep(columns, function(e){return e.id === 'anotherID'}); 

resultArray将返回与匿名函数的条件匹配的对象数组,但它不会在someArray

中返回该对象的索引

我正在寻找JavaScript / Jquery解决方案。 谢谢。

5 个答案:

答案 0 :(得分:1)

一个简单的for

var elementIndex = false;
for ( var index = 0, length = someArray.length; index < length; index++ ) {
    if ( someArray[index].id === 'anotherID' ) {
        elementIndex = index;
        break;
    }
}

if ( elementIndex !== false ) {
    console.log(elementIndex);
}

答案 1 :(得分:1)

最简单的方法是编写自己的函数(除非您可以访问内置的indexOf方法并且它适用于您:

var indexOf = function(array, predicate) {
   for(var i = 0; i < array.length; i++) {
       if(predicate(array[i])) {
           return i;
       }
   } 
   return -1;
}

然后你可以这样称呼:

var index = indexOf(someArray, function(e){ return e.id === 'anotherID'; });

答案 2 :(得分:1)

IE8

不支持<。> .reduce()

使用reduce的一个衬垫:

someArray.reduce(function(p,c,i){return c.id=='anotherID'?i:p},-1);

答案 3 :(得分:0)

使用jQuery的$.each

var posIndex = '';
$.each(someArray, function(i){
    if(someArray[i].id === 'anotherID'){
        posIndex = i;
        return false; /*Stop iterating once found. Tip from Felix Kling*/
    }
});

请参阅example fiddle (upper code part)

如您所见,使用jQuery比普通的JS for更容易。

此答案认为每个id实际上是标识符(又名唯一),否则posIndex将返回最后一个具有anotherID

的对象

<强>更新 添加了return false;的“Felix Kling”提示。现在它将仅返回第一场比赛。如果有多个ID具有相同的值,请使用以下内容。谢谢Felix。


如果您认为可能有多个相等的ID,我建议posIndex成为一个数组然后再读取数组。例如:

var posIndexArray = [];
$.each(someOtherArray, function (i) {
    if (someOtherArray[i].id === 'anotherID') {
        posIndexArray.push(i);
    }
});

posIndexArray将是一个以逗号分隔的索引列表,然后您可以使用$.each对索引执行任何操作。

请参阅example fiddle (lower code part)

答案 4 :(得分:0)

如果您愿意,可以使用普通的JavaScript或jQuery轻松实现这一目标!

le vanilla

function getById(id, objects) {
  for (var i = 0, length = objects.length; i < length; i++) {
    if (objects[i].id === id) {
      return i;
    }
  }

  return -1;
}

jQueryyy

function getById(id, objects) {
  var index = -1;

  $.each(objects, function(i) {
    if (this.id === id) {
      index = i;
      return false;
    }
  });

  return index;
}

从那时起,你可以调用你的小方便的帮助函数并检查你是否有一个好的索引。

var index = getById('otherId', someArray);

if (~index) {
  doSomethingAwesome(someArray[index]);
}