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

检查以下 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 回答
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 回答