1

オブジェクトの配列があります。オブジェクトは次のようになります。

{name: "object1", type: "event", props: {internalid: 1}}
{name: "object2", type: "event", props: {internalid: 1}}

これらのオブジェクトの配列をループして、重複のないオブジェクトの新しい配列を作成したい (私にとってinternalIdは、propsプロパティに同じものがあれば 2 つの項目が重複しています)

internalIdプロパティに基づいて、元の配列から新しい配列に「ユニークな」オブジェクトを取得するための最良かつ最も効率的な方法は何でしょうか?

ありがとう

4

3 に答える 3

0

これは、 UnderscoreまたはLo-Dashのuniqメソッドを使用して非常に簡単に実現できます。配列がすでにソートされている場合は、少し最適化されます。どちらのライブラリにも十分に文書化されたコードがあるため、問題に対するそれらのアプローチをいつでも確認できます。

次に例を示します。

var objs = [{
    name: "object1",
    type: "event",
    props: {
        internalid: 1
    }
}, {
    name: "object2",
    type: "event",
    props: {
        internalid: 1
    }
}, {
    name: "object3",
    type: "event",
    props: {
        internalid: 2
    }
}];

var result = _.uniq(objs, false, function (item) {
    return item.props.internalid;
});
于 2013-02-06T17:24:54.003 に答える
0

おそらく最善の方法は、新しい空の配列を作成し、元の配列を単純に反復処理して、そこにまだ存在しない場合は新しい配列に要素を追加することです (独自の定義に基づいて)。あなたのソリューションがそれよりもはるかに簡単になるとは思いません。

于 2013-02-06T17:12:12.623 に答える
0

arrayDojo の機能を使用してこれを行う方法を次に示します。フィルターは、既に遭遇した ID を含む一時オブジェクトを使用します。

require(["dojo/_base/array"], function(array){

    var data = []; // load the data

    var _lookup = {};
    var uniqueArray = array.filter(data, function(item) {
        var key = item.props.internalid;
        if(_lookup[key] !== true) {
            _lookup[key] = true;
            return true;
        }
        return false;
    });
    delete _lookup;

    //use uniqueArray
});
于 2013-02-06T18:55:34.403 に答える