具有一系列对象,需要添加新对象.我如何检查是否仅存在一个关键:值对



请建议。我有这个:

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对象最初宁愿制作一系列对象。

最新更新