首页 > 解决方案 > 将内容从一个对象复制到另一个对象时,按键名排除特定键/值对

问题描述

以下示例工作正常,产生了所需的输出。但是,我想知道是否有更简洁的方法可以通过排除键created和对象updated的键/值对来执行此复制操作。data

        const actionMode = 'update';        // 'create';

        const dataFromParent = {
            itemid: "104",
            itemname: "insurance",
            itemtype: "expense",
            unitofmeasure: "$/yr",
            created: "2021-04-14 05:59:30.097",
            updated: "2021-04-14 05:59:30.097"
        }

        const data = { ...dataFromParent }; // make a shallow copy to avoid changing original object values

        if (actionMode == 'update') {
            delete data.created;
            delete data.updated;
        }

        console.log(JSON.parse(JSON.stringify(dataFromParent)));
        console.log(JSON.parse(JSON.stringify(data)));

控制台输出: 在此处输入图像描述

使用@vdegenne 于 2018 年 11 月 23 日在这篇文章中发布的建议,我尝试了:

let data = {};

if (actionMode == 'update') {
    data = (({ created, updated, ...o }) => o)(dataFromParent);
}

这会导致“编译失败”结果并出现以下错误:
在此处输入图像描述

编辑:
此修改给出了预期的结果并且没有任何"no-unused-vars"错误:

        let data = {};

        if (actionMode == 'update') {
            // eslint-disable-next-line no-unused-vars
            const { created, updated, ...rest} = { ...dataFromParent };
            data = rest;
        }

标签: javascript

解决方案


您可以使用对象解构,以便它将分配createdupdated值和其他属性分配到单个对象中。

由于您使用的是 VUE,因此在所有 import in scripttag in之前添加以下代码段x.vue file查看 VUE

// eslint-disable-next-line no-unused-vars

禁止未使用的变量 (no-unused-vars)

如果错误仍然存​​在,则更改ESLintpackage.json 中的配置

"rules": {
   "no-unused-vars": "off"
}

const dataFromParent = {
  itemid: "104",
  itemname: "insurance",
  itemtype: "expense",
  unitofmeasure: "$/yr",
  created: "2021-04-14 05:59:30.097",
  updated: "2021-04-14 05:59:30.097",
};

const { created, updated, ...rest } = dataFromParent; // make a shallow copy to avoid changing original object values
const data = rest;

console.log(data);


推荐阅读