繁体   English   中英

检查数组的长度并在其中推送或更新 object

[英]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()来返回所有条目。

在字里行间阅读我认为您想要做的是:

  • 如果“迈克尔”在数组中。 那么他的年龄应该更新到21,如果他是22岁的话。
  • 如果“Michael”不在数组中。 然后添加 21 岁的迈克尔。

您的代码中有一些奇怪的东西对我来说毫无意义。 例如,每次迭代数组时都要检查数组中的“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));

这是我对这个问题的快速解决方案:

从我的角度来看,解决一个包含临时数据的新数组是个好主意。

描述我的意思的最简单方法如下代码片段。

代码片段(For-Loop)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM