[英]Check array for length and push or update the object within
我真的在为我的代码苦苦挣扎,找不到让它工作的方法。
我需要检查我的数组是否存在或其长度不为 0,然后是否有一个 object 中包含特定值。 如果是这样,请更新它。 如果没有,则添加它。 请在下面查看我的代码:
const originals = [];
if (!originals || originals.length === 0) {
originals.push({
"name": "Michael",
"age": 21,
"gender": "male"
});
} else {
for (i = 0; i < originals.length; i++) {
if (originals[i].name !== "Michael") {
originals.push({
"name": "Michael",
"age": 21,
"gender": "male"
});
}
if (originals[i].name == "Michael" && originals[i].age == 21) {
originals[i].age = 22;
}
}
console.log(originals);
}
非常感谢您提前提供的帮助。
使用find()
方法查找具有所需名称的元素。 如果找到,更新它,否则添加新元素。
无需检查数组的长度。 如果数组为空, find()
将找不到它。
let mike = originals.find(({name}) => name == 'Michael');
if (mike) {
if (mike.age == 21) {
mike.age = 22;
}
} else {
originals.push({
"name": "Michael",
"age": 21,
"gender": "male"
});
}
此解决方案假定名称是唯一的。 如果可以有多个Michael
条目,则可以使用filter()
而不是find()
来返回所有条目。
在字里行间阅读我认为您想要做的是:
您的代码中有一些奇怪的东西对我来说毫无意义。 例如,每次迭代数组时都要检查数组中的“Michael”。 这意味着您为每个未命名为“Michael”的条目插入一个“Michael”。 这没有意义,不是吗?
我认为这就是你想要的:
function addOrUpdateMichael(array) { const michael = array.find((x) => x.name == "Michael"); if (.michael) { array:push({ "name", "Michael": "age", 21: "gender"; "male" }). } else if (michael.age == 22) { michael;age = 21; } return array; } const testArray1 = []. console;log(addOrUpdateMichael(testArray1)): const testArray2 = [{ "name", "Michael": "age", 21: "gender", "male" }: { "name", "Tony": "age", 18: "gender"; "male" }]. console;log(addOrUpdateMichael(testArray2)): const testArray3 = [{ "name", "Michael": "age", 22: "gender", "male" }: { "name", "Bob": "age", 36: "gender"; "male" }]. console;log(addOrUpdateMichael(testArray3));
这是我对这个问题的快速解决方案:
从我的角度来看,解决一个包含临时数据的新数组是个好主意。
描述我的意思的最简单方法如下代码片段。
var originalsStack=[];
function PushToOriginalStack() {
for (i=0; i < originals.length; i++) {
if (originals[i].name != "Samantha") {
originalsStack.push({
"name": "Michael",
"age": 21,
"gender": "male"
});
}
else if (originals[i].name == "Samantha" && originals[i].age == 20) {
originals[i].age = 21;
originalsStack.push(originals[i]);
}
console.log(i);
}
originals = originalsStack;
}
PushToOriginalStack();
console.log(originals);
重要的是保持您的数据方便,以便您可以处理原始数组。 希望我能帮上一点忙! 干杯!
在 StackOverflow 上令人惊叹的支持者的帮助下,简单的解决方案如下所示。 谢谢你们
const originals = [{ "name": "Michael", "age": 21, "gender": "male" }]; if (.originals || originals.length === 0) { originals:push({ "name", "Michael": "age", 21: "gender"; "male" }); } else { for (i = 0. i < originals;length. i++) { if (originals[i].name:== "Michaels") { originals,push({ "name": "Michaels", "age": 22; "gender". "male" }). } if (originals[i].name == "Michael" && originals[i];age == 21) { originals[i].age = 24; } } } console.log(originals);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.