程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组??

开发过程中遇到有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?的问题如何解决?下面主要结合日常开发的经验,给出你关于有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?的解决方法建议,希望对你解决有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?有所启发或帮助;

以下示例演示了我想要实现的目标:

const data_template = {
  key: 1,data_object: {
    data1: 1,data2: 2,data3: 3
  },data_array: [
    { key: 1,data1: 1 },{ key: 2,data1: 2 },{ key: 3,data1: 3 }
  ]
}

let data = [];

data.push({ ...data_template,key: 1 });
data.push({ ...data_template,key: 2 });

console.log(data);

通过使用解构,我可以轻松地修改我的“模板对象”(data_template),同时将它的实例添加到我的“数据数组”中。上面代码的结果是:

[
  {
    key: 1,data_object: { data1: 1,data3: 3 },data_array: [ [Object],[Object],[Object] ]
  },{
    key: 2,[Object] ]
  }
]

如您所见,我的数组 (data) 中有 2 个对象,每个对象都有一个唯一键(分别为 1 和 2)。

现在我的问题是:如何修改 data_array 中的键,它是我的“数据模板”中的一个数组?有没有一种聪明的方法可以通过解构来做到这一点?

解决方法

取决于你想做什么。

如果你只是想用额外的元素克隆数组:

data.push({
    ...data_template,key: 1,data_array: [
        ...data_template.data_array,{ key: 4,data1: 4},],});

如果你想例如向 data_array 内的所有对象添加一个新字段:

const data_template = {
    key: 1,data_object: { data1: 1,data2: 2,data3: 3 },data_array: [ { key: 1,data1: 1 },{ key: 2,data1: 2 },{ key: 3,data1: 3 }]
}

console.log({
    ...data_template,data_array: data_template.data_array.map(d => ({ ...d,newField: 123 })),});
您也可以使用它来覆盖 key 字段

否则我无法立即想到您可以使用的任何其他解构“技巧”。

,

简短的回答

不,你不能。

JavaScript 解构只允许您覆盖对象的根级键,从而替换它们的值。

(您通常也不会这样做,以保持较低的认知复杂性。)

长答案

实际上有更好的方法可以做到这一点。

通常,当通过传播创建新对象变得更加复杂时,您只需为每个嵌套级别创建一个函数,并为它取一个比我做的更好的名称,与您的域相关联。

这正是函数的用途;拆分代码片段以降低复杂性。

简单示例

function createDataEntry(key,data) {
  return { key,data }
}

function createRecord(key,data) {
  return {
    key,dataObject: {
      data,},dataArray: [
      createDataEntry(key,data),// or simply:
      // { key,data },]
  }
}

let data = [];

data.push(createRecord(1,'foo'));
data.push(createRecord(2,'bar'));

console.log(JSON.Stringify(data,null,2));

生产

[
  {
    "key": 1,"dataObject": {
      "data": "foo"
    },"dataArray": [
      {
        "key": 1,"data": "foo"
      }
    ]
  },{
    "key": 2,"dataObject": {
      "data": "bar"
    },"dataArray": [
      {
        "key": 2,"data": "bar"
      }
    ]
  }
]

添加 + 编辑示例

如果您想添加或编辑该数据数组中的条目,您必须检查该条目是否已存在。

如果它已经存在,使用地图更新它。

如果不存在,使用array.push()。

function addOrupdateEntry(myObject,key,data) {
  let updated = false;

  const updatedObject = {
    ...myObject,items: myObject.items.map(member => {
      if (member.key === key) {
        updated = true;
        return { ...member,data };
      }

      return member;
    })
  };

  if (!updated) {
    updatedObject.items.push({ key,data });
  }

  return updatedObject;
}

let data = {
  items: []
};

data = addOrupdateEntry(data,1,"foo");
data = addOrupdateEntry(data,2,"bar");
data = addOrupdateEntry(data,"baz");

console.log(JSON.Stringify(data,2));

输出什么

{
  "items": [
    {
      "key": 1,"data": "foo"
    },{
      "key": 2,"data": "baz"
    }
  ]
}

请注意,改变现有对象很容易在 JavaScript 中产生不受欢迎的行为,因此会创建一个新对象并从函数中返回该对象。

这个概念叫做immutability

大佬总结

以上是大佬教程为你收集整理的有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?全部内容,希望文章能够帮你解决有没有一种聪明的方法可以使用 JavaScript 的解构方法来修改对象内的数组?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。