我有一个Javascript数组,该数组可以包含重复的(只有2个),其键color
的值相同。
var array = [
{
"id": "1",
"color": "red",
"animal": null
},
{
"id": "2",
"color": "red",
"animal": "cat"
},
{
"id": "3",
"color": "green",
"animal": "dog"
}
];
我想删除键color
上的重复项,只保留具有键animal
而不是null
的唯一对象。
var uniqueArray = [
{
"id": "2",
"color": "red",
"animal": "cat"
},
{
"id": "3",
"color": "green",
"animal": "dog"
}
];
var obj = {};
for (var i = 0; i < array.length; i++) {
obj[array[i]['name']] = array[i];
}
var uniqueArray = new Array();
for (var key in obj) {
uniqueArray.push(obj[key]);
}
这是结果:
var uniqueArray = [
{
"id": "1",
"color": "red",
"animal": "null"
},
{
"id": "3",
"color": "green",
"animal": "dog"
}
];
我不知道如何选择要保留的对象。
注意:我不能使用ES6
答案 0 :(得分:2)
我希望动物的价值应为 null 而不是第一个动物的“ nul”。
var array = [
{
"id": "1",
"color": "red",
"animal": null
},
{
"id": "2",
"color": "red",
"animal": "cat"
},
{
"id": "3",
"color": "green",
"animal": "dog"
}
];
如果要基于颜色选择唯一值(在这种情况下为对象),最好创建另一个对象并将颜色作为获取唯一值的键。
var obj = {};
array.forEach(a => {
if(!obj[a.color] && a.animal) {
obj[a.color] = a;
}
});
现在对象看起来像下面的
现在,您将获得一个包含基于颜色的唯一对象的对象,更重要的是,您的动物属性不为null。 您说您无法想到在这里选择什么。 IMO最好选择具有值而不是空值的值。
注意:上面的代码为您提供了一个对象,但是您可以通过以下操作轻松地将其转换为数组。不能完全确定Object.values是否为es6功能(在文档中找不到任何内容)。
var arr = Object.values(obj);
如果您不喜欢上述解决方案,则可以遍历该对象并将其推入数组。
var finalArr = [];
Object.keys(obj).forEach(function(key) {
finalArr.push(obj[key])
});
答案 1 :(得分:0)
只需使用简单的null
删除所有filter
值:
var array = [{"id":"1","color":"red","animal":"cat"},{"id":"2","color":"red","animal":"null"},{"id":"3","color":"green","animal":"dog"},{"animal":"dog"}];
var uniqueArray = array.filter(function(e) {
return e.animal != "null";
});
console.log(uniqueArray);
答案 2 :(得分:0)
不使用ES6
var array = [{
"id": "1",
"color": "red",
"animal": "cat"
},
{
"id": "2",
"color": "red",
"animal": "null"
},
{
"id": "3",
"color": "green",
"animal": "dog"
}
];
var a = [];
var arr = [];
array.forEach(function(e, i) {
if (a.indexOf(e.color) == -1 && e.animal != "null") {
a.push(e.color)
arr.push(e)
}
})
console.log(arr)