取这个数组:
[
{"color": "blue","type": 1},
{"color": "red","type": 1},
{"color": "blue","type": 1},
{"color": "green","type": 1},
{"color": "green","type": 1},
{"color": "red","type": 2},
{"color": "red","type": 1},
{"color": "green","type": 2},
{"color": "red","type": 3},
];
我将如何查找数组中哪个“颜色”具有不同的“类型”(而不是所有其他具有相同“名称”的对象)?
我希望能够遍历此数组并创建另一个看起来像这样的数组:
{red, green}
请注意,由于所有具有“ color”:“ blue”的对象都具有相同的“ type”,因此省略了blue。
我得到的最接近的是:https://jsfiddle.net/0wgjs5zh/,但是它将所有颜色添加到数组中并附加了不同的类型:
arr.forEach(function(item){
if(newArr.hasOwnProperty(item.color+ '-' +item.type)) {
// newArr[item.color+ '-' +item.type].push(item);
}
else {
newArr[item.color+ '-' +item.type] = item;
}
});
// RESULT
{blue-1, green-1, green-2, red-1, red-2, red-3}
最佳答案
您可以使用两次遍历,一次遍历集合,一次遍历生成结果数组。
var array = [{ "color": "blue", "type": 1 }, { "color": "red", "type": 1 }, { "color": "blue", "type": 1 }, { "color": "green", "type": 1 }, { "color": "green", "type": 1 }, { "color": "red", "type": 2 }, { "color": "red", "type": 1 }, { "color": "green", "type": 2 }, { "color": "red", "type": 3 }, ],
result,
object = Object.create(null);
array.forEach(function (a) {
object[a.color] = object[a.color] || {};
object[a.color][a.type] = true;
});
result = Object.keys(object).filter(function (k) {
return Object.keys(object[k]).length > 1;
});
console.log(result);
关于javascript - 检测数组中的对象是否具有相同的属性,但其他属性与其他对象不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37440579/