node.js - 使用解构赋值进行部分对象复制

标签 node.js variable-assignment destructuring

需要将输入对象复制到另一个对象的情况很常见。通常,您需要复制一些属性,最终会得到一个非常相似的对象,但属性较少。

此处为解构赋值的引用 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring

假设您有这个输入对象:

// an object with data
let oldObject = {
  a: 'this is a',
  b: 'this is b',
  c: 'this is c',
  d: 'this is d'
}

我就是这样做的:

let myNewObject = {
  a: oldObject.a,
  b: oldObject.b,
  c: oldObject.c
}

这是我一直在使用的:

// new version
let { a, b, c } = oldObject
let myNewObject = { a, b, c };

我开始使用这个,似乎工作正常:

// newer version
let myNewObject = { a, b, c } = oldObject;

新版本的问题是我声明了变量 a、b 和 c。在这种情况下没有问题( almost ),但是如果它们的名称是 inputoutputtempi 会怎样? 或可能已在作用域中声明的变量的任何其他通用名称。

所以解决方案很棒,但更好的是这些变量以某种方式在该行中创建和销毁,并且在其他地方不可用。 myNewObject 当然应该可以访问。

我尝试将它包装在这样的函数中,但根本没有运气:

let myNewObject = (function() { return { a, b, c } = oldObject })();

let myNewObject = (function() { let temp = { a, b, c } = oldObject; return temp; })();

所以我不确定实现这一目标的最佳方法是什么,我已经很接近了,但我错过了一些东西。

最佳答案

The problem with the newer versions is that I'm declaring variables a, b and c. In this case there is no problem

有一个大问题。

let myNewObject = { a, b, c } = oldObject;

分配给现有的abc变量,这将在宽松模式下污染全局范围,或者在严格模式下导致错误。而myNewObject === oldObject。它的ES5 variation是:

var myNewObject = (a = oldObject.a, b = oldObject.b, c = oldObject.c, oldObject);

this answer 中所述,您正在寻找的单行代码是具有解构参数的 IIFE:

let myNewObject = (({ a, b, c }) => ({ a, b, c }))(oldObject);

关于node.js - 使用解构赋值进行部分对象复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156208/

相关文章:

node.js - 如何使用Firebase功能下载图像并将其存储在数据库中?

node.js:201 process.nextTick 错误?

node.js - 使用 Nodejs mscdex/ssh2 的 root 密码

c - 强制转换是否会删除 C/C++ 中的字节序依赖性?

typescript - 解构空数组时,TS 不会推断可能未定义

javascript - 使用 Jest 进行 React 测试 : Destructuring assignment not working

javascript - 咕噜声 "reference error"和 "task not found"

javascript - 在javascript中分配不存在的变量

oracle - 这些 PL/SQL 变量初始化是否等效?

javascript - 哪种方式交换两个变量值更优化?