如何使一个JSON数组唯一[复制](How to make a JSON array unique

2019-06-26 19:05发布

可能重复:
阵列唯一值
从获得使用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 array..how我可以让这个JSON数组唯一这样

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

.IM寻找使用较少的迭代建议, Jquery $.inArray没有在这种情况下工作。

建议使用任何第三方库的欢迎。

Answer 1:

检查以下问题SO解决方案:

从获得使用jQuery JSON阵列的独特成果

你必须通过你的阵列中迭代并创建一个包含唯一值的新数组。



Answer 2:

您可以使用下划线的uniq的 。

在你的情况,你需要提供一个迭代提取“ID”:

array = _.uniq(array, true /* array already sorted */, function(item) {
  return item.id;
});


Answer 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); 



Answer 4:

你可能会通过删除重复项必须循环。 如果存储的项目都是为了你建议,这是一个循环的一个简单的问题:

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;
}


Answer 5:

您可以轻松地编写这个自己。 从我的头顶这个浮现在脑海。

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;


文章来源: How to make a JSON array unique [duplicate]