我有一个具有多个属性的对象数组。如果数组中的对象已经具有相同的新对象属性值组合,我想在推送另一个对象之前检查。
[ {
"mobile" : "6014834",
"cars" : 55,
"TV" : 123,
"bottle" : "2897621771 - Hand Unload",
},
{
"mobile" : "6014834",
"cars" : 55,
"TV" : 126,
"bottle" : "2897621771 - Hand Unload",
},
{
"mobile" : "6014834",
"cars" :33,
"TV" : 26,
"bottle" : "2897621771 - Hand Unload",
} ]
必须推送的新对象
{
"mobile" : "6013456",
"cars" :33,
"TV" : 26,
"bottle" : "Dummy",
}
我想检查新车的电视和电视的组合是否已经存在于阵列车+电视应始终是唯一的,我不想推。因此,如果对象是
,则不应推送上述对象{
"mobile" : "6014834",
"cars" :33,
"TV" : 29,
"bottle" : "2897621771 - Hand Unload",
}
然后就可以推了。
我该怎么检查?
答案 0 :(得分:0)
您可以尝试这样的事情
var carObj = [ {
"mobile" : "6014834",
"cars" : 55,
"TV" : 123,
"bottle" : "2897621771 - Hand Unload",
},
{
"mobile" : "6014834",
"cars" : 55,
"TV" : 126,
"bottle" : "2897621771 - Hand Unload",
},
{
"mobile" : "6014834",
"cars" :33,
"TV" : 26,
"bottle" : "2897621771 - Hand Unload",
}
]
carObj.forEach(function(entry) {
if (entry.cars != 33 && entry.TV != 26) {
}
});
答案 1 :(得分:0)
<强>首先强>
您需要扩展默认数组方法,如下所示,它将根据tv
和cars
字段检查重复项:
Array.prototype.contains = function ( needle ) {
for (i in this) {
if (this[i].cars === needle.cars
&& this[i].TV === needle.TV) {
return true;
}
}
return false;
}
<强>第二强>
在每次插入对象之前,需要检查对象是否存在于数组中(如果不存在),然后添加,以下代码部分执行此操作:
if(!arrayObj.contains(insertObj)) {
arrayObj.push(insertObj);
}
请使用以下代码:
var arrayObj = [{
"mobile" : "6014834",
"cars" : 55,
"TV" : 123,
"bottle" : "2897621771 - Hand Unload",
},
{
"mobile" : "6014834",
"cars" : 55,
"TV" : 126,
"bottle" : "2897621771 - Hand Unload",
},
{
"mobile" : "6014834",
"cars" :33,
"TV" : 26,
"bottle" : "2897621771 - Hand Unload",
} ];
Array.prototype.contains = function ( needle ) {
for (i in this) {
if (this[i].cars === needle.cars
&& this[i].TV === needle.TV) {
return true;
}
}
return false;
}
var insertObj = {"mobile" : "6014834","cars" :33,"TV" : 26,"bottle" : "2897621771 - Hand Unload"};
if(!arrayObj.contains(insertObj)) {
arrayObj.push(insertObj);
}
console.log(arrayObj);
答案 2 :(得分:0)
您可以使用_(Underscore)库来解决此类问题。它有一个叫做where的方法。此方法在集合中搜索指定的键值对,如果参数匹配,则将它们返回到数组中。 你可以像这样调用这个方法。
让我们说你的新对象是newObject。
var newObject = {
"mobile":someValue,
"cars":someValue2,
"TV":someValue3,
"bottle":someValue4
};
if(_.where(carsAndTvs,{"cars":newObject.cars,"TV":newObject.TV}).length >0){
//push object into array
}
您可以阅读有关此方法的更多信息
答案 3 :(得分:0)
let coinciding = arr.findIndex(oldObj => {
let keys = Object.keys(oldObj); // property names in the oldObj
// count how many properties have the same value:
let propsEqual = keys.reduce((prev, key) => {
return prev += (oldObj[key] === newObject[key] ? 1 : 0)
}, 0);
return propsEqual == keys.length;
})
重合将是具有相同属性的对象的旧数组中的索引。如果没有巧合,它将为-1。