检查对象数组中是否存在具有特定键值的对象

时间:2018-10-26 09:50:32

标签: javascript arrays reactjs object ecmascript-6

我正在尝试检查项目数组是否包含具有特定键值的对象,如果包含,则只需使用新的项目对象更新项目数组

[{name: example1, quantity: 2},{name: example2, quantity: 3},{name: example3, quantity: 5}]

因此,例如,如果我要推送一个名称与“ example1”相同的对象,我想检查数组中是否存在该对象,是否存在,只需使用具有新数量的新对象更新该对象即可例子。

我试图尽我所能解释,如果您需要更多说明,请告诉我。

9 个答案:

答案 0 :(得分:3)

您可以使用 Array#some() Array#find() 方法的简单组合:

if (data.some(o => o.name == toPush.name)) {
  data.find(o => o.name == toPush.name).quantity = toPush.quantity;
}

data是您的arraytoPush是您要更新的object

演示:

var data = [{
  name: "example1",
  quantity: 2
}, {
  name: "example2",
  quantity: 3
}, {
  name: "example3",
  quantity: 5
}];

let toPush = {
  name: "example2",
  quantity: 10
};

if (data.some(o => o.name == toPush.name)) {
  data.find(o => o.name == toPush.name).quantity = toPush.quantity;
}

console.log(data);

答案 1 :(得分:1)

您可以使用Array.find()进行更新并推送唯一的对象。您还可以使用existObj = obj;,以便在现有对象上设置obj的所有更新属性,而不仅仅是在一个属性上设置(与quantity一样)。但是,如果您只需要quantity属性进行更新,则可以使用existObj.quantity = obj.quantity;

let arr = [{name: 'example1', quantity: 2},{name: 'example2', quantity: 3},{name: 'example3', quantity: 5}];
let obj = {name: 'example1', quantity: 5};
var existObj = arr.find(({name}) => name === obj.name);
if(existObj){
  existObj = obj;
} else {
  arr.push(obj);
}
console.log(arr);

答案 2 :(得分:1)

我将使用Array.prototype.some()函数:

{  
  "name": "set",
  "type":"function",
  "inputs":[{"name":"num", "type":"int"}]
  "output":[{"name":"value", "type":"int"}]
}

答案 3 :(得分:1)

与此配合使用Array.findIndex()

let myArray = [{name: 'example1', quantity: 2},{name: 'example2', quantity: 3},{name: 'example3', quantity: 5}];
const newItem = { name: 'example1', quantity: 5 };
const indexOfItem = myArray.findIndex(item => item.name === item.name);

if(indexOfItem === -1) { // not existing
  myArray.push(newItem);
else {
  myArray[indexOfItem] = newItem;
} 

答案 4 :(得分:1)

var ObjectArray = [{name: 'example1', quantity: 2},{name: 'example2', quantity: 3},{name: 'example3', quantity: 5}]
    console.log(ObjectArray)
   var name = 'example2'
   var index = ObjectArray.findIndex(product => product.name == name);
   if(index>=0){
        console.log("Found and updated ObjectArray")
       ObjectArray.splice(index, 1, {name: 'example2', quantity: 8});
       console.log(ObjectArray)
   }
   else{
      console.log("not found")
   }

答案 5 :(得分:1)

如果您要同时匹配对象键和值,则可以使用。

let myArray = [{name: 'example1', quantity: 2},{name: 'example2', quantity: 3},{name: 'example3', quantity: 5}];
let newObj = { name: 'example1', quantity: 5 };

let myArrayJSON = JSON.stringify(myArray);
let newObjJSON = JSON.stringify(newObj);

if(myArrayJSON.indexOf(newObjJSON) === -1){
   myArray.push(newObj); 
}

答案 6 :(得分:1)

您可以创建“推”功能并传递要添加/更新的对象。如果需要使用“ find”来添加/更新arr,函数将谨慎处理。而且,这将照顾所有属性,而不仅仅是“数量”

var arr = [{name: 'example1', quantity: 2},{name: 'example2', quantity: 3},{name: 'example3', quantity: 5}]

function push(obj) {
  var data = arr.find(({name}) => name == obj.name) || (arr = arr.concat({})).slice(-1)[0];
  Object.assign(data, obj)
}

push({ name: 'example11', quantity: 100 })
console.log('example11 added', arr)

push({ name: 'example1', quantity: 100 })
console.log('example1 updated', arr)

答案 7 :(得分:1)

您可以使用Array.forEach遍历每个对象,并且我们可以使用索引参数更新现有数组。

请参见下面的代码。

var data = [{name: "example1", quantity: 2},{name: "example2", quantity: 3},{name: "example3", quantity: 5}]

var object = {name: "example1", quantity: 14}

data.forEach((o,index) => {
  if(o.name === object.name){
    o.quantity = object.quantity
    return data[index] = o
  }else{
    data[index] = o
  }
})


console.log("updated data array =>", data)

答案 8 :(得分:1)

let arr1 = [{name: 'example1', quantity: 2},{name: 'example2', quantity: 3},{name: 'example3', quantity: 5}];
let obj1 = {name: 'example1', quantity: 5};
if(arr1.filter(item=> item.name === obj1.name).length==0){
  arr1.push(obj1);
}
else{
  arr1.filter(item=> item.name === obj1.name)[0].quantity = obj1.quantity;
}