在对象数组中循环?

looping inside an array of object?

我的问题是更新包含对象的数组,每个对象都包含数组,我想更新全局数组,值引用对象内部的数组,这个逻辑!

generalArray = [{name:String, features:String[]}]

// Try edit message
let array1 = [{ name: "num", features: ['id']  },
            { name: "cat", features: ['gender'] }];
ob = {name:'num2', features:['id']};

function updateArr(arr,ob){

  const index = arr.findIndex(x => 
      ob.features.toString() === x.features.toString()
                              );
    if (index === -1) {
        arr.push(ob);
    } else {
        arr[index] = ob;
    }
}
console.log(array1);
updateArr(array1,ob);
console.log(array1);

当任何对象的 features 数组包含一个字符串时,这是完美的,但如果它包含多个字符串,exm features=['id','gender' ] 它不能做任何事情!请帮忙,谢谢

这里我针对你的问题做了一个解决方案

var array1 = [{ name: "num", features: ['id', 'gender']},
            { name: "cat", features: ['gender']}];
ob = {name:'num2', features:['id']};

function updateArr(arr, ob){
  for(var i = 0;i < arr.length; i++) {
    if(ob.features.join("") === arr[i].features.join("")) {
      arr[i] = ob;
      return;
    }
  }
  arr.push(ob);
}

updateArr(array1, ob);
console.log(array1);

选项 1:要素数组中元素的顺序无关紧要。

您只需更改下面代码行中的比较运算符

ob.features.toString() === x.features.toString()

JSON.stringify(ob.features.sort()) === JSON.stringify(x.features.sort())

选项 2:如果要素数组中元素的顺序很重要。然后你可以简单地删除.sort()

注意:如果您不想使用stringify,那么您可以使用此处答案中提到的数组比较功能 - .

let array1 = [{ name: "num", features: ['id']  },
            { name: "cat", features: ['gender'] }];
ob = {name:'num2', features:['id']};

function updateArr(arr,ob){

  const index = arr.findIndex(x => 
  ob.features.includes(x.features)
     // ob.features.toString() === x.features.toString()
                              );
                              debugger
    if (index === -1) {
        arr.push(ob);
    } else {
        arr[index] = ob;
    }
}
console.log(array1);
updateArr(array1,ob);
console.log(array1);