2013-08-02 45 views
2

我的陣列看起來是這樣的:獲取對象的指數

var someArray = 

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

我想獲得一個對象,誰在參考與someArray

我知道,我可以用$.grep()id === 'anotherID'的指標參考返回對象:

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

resultArray將返回一個匹配匿名fu條件的對象數組但它不會返回該對象的索引someArray

我正在尋找JavaScript/Jquery解決方案。 謝謝。

+0

您使用underscore.js?他們有這個和更多的算法 – dchhetri

+1

@ user814628問題被標記爲'jquery'。請注意。 – RaphaelDDL

+0

@ FelixKling它可能在同一時間,可能不會。由於他使用'jquery',所以它不會被複制。 – RaphaelDDL

回答

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;一角。現在它只會返回第一個匹配。如果有多個具有相同值的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)

+0

迄今爲止較好的答案,因爲Q被標記爲'jquery'並且它帶有小提琴。 – 2013-08-02 20:06:53

+0

@Jeffman謝謝。我已經更新了答案,以涵蓋具有相同值的多個id(非唯一'id')。 – RaphaelDDL

+0

@RaphaelDDL很好的回答!我給你一個非常好的和有效的答案。我也會給你+2的小提琴和答案的第二部分,但我不能。謝謝 – gumenimeda

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

最簡單的方法將是寫自己的功能(除非你有訪問內置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'; }); 
0

如果您願意,您可以使用簡單的ol'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]); 
} 
1

。降低()不支持IE8的使用減少

一個內膽:

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