在对象数组中循环?
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);
我的问题是更新包含对象的数组,每个对象都包含数组,我想更新全局数组,值引用对象内部的数组,这个逻辑!
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);