1

2 つの配列があり、1 つは次のような単純な配列です。

["Adrian", "Jhon"]

もう 1 つの配列は、jSon オブジェクトから変換したオブジェクトの配列です。元のjSonはこれでした:

[
    {
        "Nome": "Jhon",
        "Departamento": "Test"
    },
    {
        "Nome": "Adrian",
        "Departamento": "Test"
    },
    {
        "Nome": "Jessy",
        "Departamento": "Test"
    }
]

ここで、最初の配列と 2 番目の配列を比較する必要があります。属性が最初の配列と一致する場合、Nomeオブジェクト全体を別のオブジェクト配列に返します。

最初の配列の順序を維持するjQueryまたは純粋なJavaScriptでどうすればよいですか?

編集 - 反対票を止めるために

私はすでにこれを試しました:

jQuery.each(array, function (x) {
     novoRepo.push(jQuery.grep(repositorio, function (a) {
          return a.Nome == array[x];
     }));
});

しかし、a.Nome が定義されていないという例外が発生します。

4

3 に答える 3

8

Arrayfilterメソッドを使用します。

var search = ["Jhon","Adrian"],
    data = [
        {"Nome": "Jhon", "Departamento": "Test"},
        {"Nome": "Adrian", "Departamento": "Test"},
        {"Nome": "Jessy", "Departamento": "Test"}
    ];
var result = data.filter(function(obj) {
    return search.indexOf(obj.Nome) >= 0;
});

サポートしていない、filterまたはindexOf(特に IE<9) ブラウザーの場合は、それらをシムするか、同等の jQuery を使用できます$.grep($.inArray明示的なコードについては、以下の @NULL の回答を参照してください)。


search配列の順序ではなく配列の順序を保持するには、すべての検索名に対して に 1 つの結果しかない場合にdata使用できます。mapdata

result = search.map(function(name) {
    for (var i=0; i<data.length; i++)
        if (data[i].Nome == name)
            return data[i];
});

各名前の結果がまったくないか、複数ある可能性がある場合は、次を使用することをお勧めしますconcatMap

result = Array.prototype.concat.apply(null, search.map(function(name) {
    return data.filter(function(obj) {
         return obj.Nome == name;
    });
});

または、$.map配列を自動的にアンラップします:

result = $.map(search, function(name) {
    return $.grep(data, function(obj) {
         return obj.Nome == name;
    });
});
于 2013-06-25T13:00:32.720 に答える
4

フィルターなしでこれを行うことができます:

ライブデモ

var found = [];
$.each(["Jhon","Adrian"],function(i, name) {
  $.each(otherObject,function(j,obj) {
    if (obj.Nome==name) found.push(obj); // you could leave if only one of each
  });
});
于 2013-06-25T13:01:00.780 に答える
2

@Bergiの答えを拡張するには

とを使用する$.grepと、$.inArray次のようになります。

var search = ["Jhon","Adrian"],
    data = [
        {"Nome": "Jhon", "Departamento": "Test"},
        {"Nome": "Adrian", "Departamento": "Test"},
        {"Nome": "Jessy", "Departamento": "Test"}
    ];
var result = $.grep(data, function(obj) {
    return $.inArray(obj.Nome, search) >= 0;
});
于 2013-06-25T13:06:59.040 に答える