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 を使用した 1 つのライナー:

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*/
    }
});

例 fiddle (上部コード部分)を参照してください。

ご覧のとおり、jQuery の使用は通常の JS よりもはるかに簡単ですfor

この回答は、それぞれidが実際には識別子(別名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 に答える