2

我的数组看起来像这样:

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 解决方案。谢谢你。

4

5 回答 5

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);
}
于 2013-08-02T20:02:47.890 回答
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'; });
于 2013-08-02T20:03:38.613 回答
1

.reduce() 不受 IE8 支持

一个使用 reduce 的班轮:

someArray.reduce(function(p,c,i){return c.id=='anotherID'?i:p},-1);
于 2013-08-02T20:51:07.317 回答
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*/
    }
});

请参阅示例小提琴(上部代码部分)

如您所见,使用 jQuery 比使用普通 JS 容易得多for

这个答案认为 eachid确实是一个标识符(又名unique),否则posIndex将返回最后一个具有 的对象的位置anotherID

更新 添加了 'Felix Kling' 提示return false;。现在它将只返回第一个匹配项。如果有多个具有相同值的 id,请在下面使用。谢谢菲利克斯。


如果您认为可能有多个相同的 id,我建议您将其posIndex变成一个数组,然后您稍后再读取该数组。例子:

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

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

请参阅示例小提琴(较低的代码部分)

于 2013-08-02T20:04:51.553 回答
0

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

香草

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]);
}
于 2013-08-02T20:39:49.560 回答