请建议。我有这个:
var x =[ { id: '1', item: 'item1', price: 'price1' },
{ id: '2', item: 'item2', price: 'price2' }
]
我需要能够继续在此数组中添加新对象,但是只有条件,只有 id
应该是唯一的。因此,我不应该添加
{id: '2', item: 'item3', price: 'price3'}
并能够添加
之类的东西{id: '3', item: 'item2', price: 'price3'}
如何执行我的条件检查?
基本上,其余所有,但是id
可以重复。并且没有jQuery
请。
预先感谢您!!!
将所有ID都放入数组中,然后检查给定的对象ID是否在该数组中
for ex:
var allids = x.map(obj => obj.id); // Es 6
if(allids.indexOf(currentObj.id) > -1) {
// exist. don't add.
}else {
// add
}
如果您不想要ES6行,
var allids = x.map(function(obj) {return obj.id;});
function addObjectToArray(arr,obj){
var findEle = arr.find(function(o){
return o.id === obj.id;
})
if(findEle === undefined){
arr.push(obj);
}
return arr;
}
过滤到救援
var x =[ { id: '1', item: 'item1', price: 'price1' },
{ id: '2', item: 'item2', price: 'price2' }
]
addToX(x,{ id: '2', item: 'item2', price: 'price2' }) // will throw duplicates
addToX(x,{ id: '4', item: 'item2', price: 'price2' }) // NO duplicates
function addToX(obj,newObj) {
let duplicates = obj.filter((eachObj) => {
return eachObj["id"] == newObj["id"]
})
console.log(duplicates, "duplicates")
}
我们可以将现有ID用作字典
var x =[ { id: '1', item: 'item1', price: 'price1' },
{ id: '2', item: 'item2', price: 'price2' }
]
var exisingIds = x.reduce(function(res,obj){
res[obj.id]=true
return res;
},{})
function add2(item){
if(!exisingIds[item.id]){
x.push(item)
exisingIds[item.id]=true;
}
}
add2({ id: '3', item: 'item3', price: 'price3' })// will be added
add2({ id: '3', item: 'item3', price: 'price3' }) // this will not
console.log(x);
您可以将lodash的groupby用于此。
,例如
var x = [
{ id: '1', item: 'item1', price: 'price1' },
{ id: '2', item: 'item2', price: 'price2' }
];
const addToX = (object) => {
if(!_.groupBy(x, 'id')[object.id]){
x.push(object);
}
}
,如果您不想在运行时间内计算出来,也可以将groupBy
对象存储,或者也可以对Groupby对象进行输入,或者您只想让GroupBy'Ed对象最初宁愿制作一系列对象。