4

重複の可能性:
配列の一意の値
jQueryを使用してJSON配列から一意の結果を取得します

私はこのようなJSON文字列を持っています

[
 Object { id="38",product="foo"},
 Object { id="38",product="foo"},
 Object { id="38",product="foo"},
 Object { id="39",product="bar"},
 Object { id="40",product="hello"},
 Object { id="40",product="hello"}

]

このJSON配列に重複する値があります。このJSON配列をこのように一意にするにはどうすればよいですか。

[
 Object { id="38",product="foo"},
 Object { id="39",product="bar"},
 Object { id="40",product="hello"}
]

。反復回数が少ない提案を探していますが Jquery $.inArray、この場合は機能しません。

サードパーティのライブラリを使用することをお勧めします。

4

5 に答える 5

6

アンダースコアのuniqを使用できます。

あなたの場合、'id'を抽出するためのイテレータを提供する必要があります。

array = _.uniq(array, true /* array already sorted */, function(item) {
  return item.id;
});
于 2012-08-06T10:20:29.133 に答える
3

// Assuming first that you had **_valid json_**
myList= [
    { "id":"38","product":"foo"},
    { "id":"38","product":"foo"},
    { "id":"38","product":"foo"},
    { "id":"39","product":"bar"},
    { "id":"40","product":"hello"},
    { "id":"40","product":"hello"}
];

// What you're essentially attempting to do is turn this **list of objects** into a **dictionary**.
var newDict = {}

for(var i=0; i<myList.length; i++) {
    newDict[myList[i]['id']] = myList[i]['product'];
}

// `newDict` is now:
console.log(newDict);

于 2012-08-06T10:44:18.040 に答える
1

おそらく、重複を削除するためにループする必要があります。保存されているアイテムが提案どおりの順序である場合、それは単一のループの単純な問題です。

function removeDuplicates(arrayIn) {
    var arrayOut = [];
    for (var a=0; a < arrayIn.length; a++) {
        if (arrayOut[arrayOut.length-1] != arrayIn[a]) {
            arrayOut.push(arrayIn[a]);
        }
    }
    return arrayOut;
}
于 2012-08-06T10:21:08.210 に答える
1

次の SO の質問で解決策を確認してください。

jQuery を使用して JSON 配列から一意の結果を取得する

配列を繰り返し処理し、一意の値を含む新しい配列を作成する必要があります。

于 2012-08-06T10:17:47.993 に答える
1

これは自分で簡単にコーディングできます。頭のてっぺんから、これが思い浮かびます。

var filtered = $.map(originalArray, function(item) {
    if (filtered.indexOf(item) <= 0) {
        return item;
    }
});

または、当面のケースに特化したより効率的なアルゴリズムが提案されているように:

var helper = {};
var filtered = $.map(originalArray, function(val) {
    var id = val.id;

    if (!filtered[id]) {
        helper[id] = val;
        return val;
    }
});
helper = null;
于 2012-08-06T10:19:06.073 に答える