可能重复:
Array unique values
Get unique results from JSON array using jQuery
我有一个像这样的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
在这种情况下不起作用。
欢迎使用任何第三方库的建议。
答案 0 :(得分:5)
您可以使用underscore's uniq。
在您的情况下,您需要提供一个迭代器来提取'id':
array = _.uniq(array, true /* array already sorted */, function(item) {
return item.id;
});
答案 1 :(得分: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);
答案 2 :(得分:1)
答案 3 :(得分: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;
答案 4 :(得分: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;
}