15

現在書いているいくつかの jQuery コードを見ていますが、C# の脳にとっては奇妙に見えます。これを行うより良い方法はありますか?

var idToLookFor = 2;
var myArray = [{id:1},{id:2},{id:3}]

var arrayItem = $.grep(myArray , function (elm) {
    return elm.id == idToLookFor;
});

var itemFound = arrayItem[0];

grep が配列を返すのは、find 型の関数ではなく、filter 型の関数であると理解できるので、配列ではなく 1 つの項目のみを返す関数が本当にあるのではないかと思います。

4

6 に答える 6

14

This answer to another questionは、正しい答えが見つかった後でもgrepが配列をループし続けることを指摘しています。上記の例では問題ではありませんが、配列がはるかに大きくなる可能性がある場合は、注目に値します:非 grep ソリューション

見つかったオブジェクトを返す関数にラップされているのは、単なる for ループです。grep メソッドに固執したとしても、ロジックを再利用可能な関数に抽象化し、それを適切なヘルパー ファイルのどこかに保持します。

リンクをたどるかどうかを決定する前に、私が何を意味するかを確認できるように、純粋に回答の修正版を投稿しています。

for (var i = 0, len = myArray.length; i < len; i++) 
{
    if (myArray[i].id === idToLookFor)
    {
        return myArray[i]; // Return as soon as the object is found
    }
}
于 2013-08-02T15:08:12.610 に答える
1

Blazemonger のコメントを拡張します。

var itemFound = myArray[idToLookFor - 1]

私があなたの質問を正しく理解していれば、あなたが探しているアイテムを手に入れることができるはずです. 1 からのインデックス作成を考慮して -1 に注意してください

編集:これは、質問にあるように、配列が常にIDの昇順でソートされることも前提としています。ID が適切にインクリメントされるが、配列が最初に並べ替えられていない場合は、次を参照してください: JavaScript で文字列プロパティ値によるオブジェクトの配列の並べ替え

于 2013-08-02T13:46:02.867 に答える
0

使ってください

var idToLookFor = 2;
var myArray = [{id:1},{id:2},{id:3}]

var arrayItem = $.map(myArray , function (elm) {
    if(elm.id == idToLookFor)
      return elm.id ;
});

var itemFound = arrayItem[0];
于 2015-12-21T05:09:14.893 に答える
0

オブジェクトの配列がある場合、これは次のようになります。

var result = myArray.filter(function(v) {
    return v.id === idToLookFor; 
})[0];

単純な配列の場合inArrayを使用できます。アイテムが存在する配列のキーを返します!

var itemFound= myArray[$.inArray(idToLookFor,myArray)];

于 2013-08-02T13:40:44.120 に答える
0

ここで私の答えをチェックしてください

Array.find の polyfill Array.prototype.find コードからコピーし、最初のパラメーターとして配列を追加しました。

検索語を述語関数として渡すことができます

于 2019-05-06T19:20:42.980 に答える