0

配列内のオブジェクトを検索する次の方法を並べ替えました。この質問は数え切れないほど聞かれていますが、次の方法からどれが最善かを知りたいです。他にあるならそれも知りたいです。

使用する$.grep()

function is_in_array(arr,element){
    var result = $.grep(arr, function(e){ return e.id == element; });
    return result.length;
}

上記の関数は配列の長さを返します。

  • 要素が存在しない場合は 0
  • 要素が存在する場合は 1
  • 同じ値を持つ複数の要素が存在する場合、長さ > 1

ルックアップ オブジェクトの使用

var lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
    lookup[array[i].id] = array[i];
}

このようにして、毎回配列全体をトラバースする必要はありません。lookup[id]代わりにチェックするだけです。

従来の方法で for ループ

function in_array(array, id) {
    for(var i=0;i<array.length;i++) {
        if(array[i].id === id) {
            return true;
        }
    }
    return false;
}

要素が存在するかどうかを確認するには、in_array(arr,element).

どのアプローチが最適ですか? 質問は真剣に重複しているように聞こえますが、これら3つだけからどれが最適かを確認したいだけです.

アップデート

配列には次のようなオブジェクトが含まれます-

var arr = [];
var nameObj = {};

nameObj.label = "somename";
nameObj.id = 123;
arr.push(nameObj);
.
.
.
4

2 に答える 2

1

ループの代わりに組み込みのmap()メソッドを使用できます。

var lookup=array.map(function(e){return e.id;});

(IE 8 ではサポートされていません)

于 2013-05-09T21:49:07.647 に答える