【问题标题】:ES6 - Destructuring assignment - Unpack some properties from existing object to a new object? [duplicate]ES6 - 解构赋值 - 将一些属性从现有对象解包到新对象? [复制]
【发布时间】:2018-11-02 10:14:57
【问题描述】:

是否可以将对象的某些键解包为新对象?

假设,我想将 3 个键(a、b、c)从 test 对象复制到一个新对象(abc)。下面提到的代码将起作用。

const test = {a:1, b:2, c:3, d:4, e:5 };
const {a, b, c} = test;
const abc = { a, b, c, f: 6};

有什么方法可以在一个语句中完成吗?

还有一种方法。

const test = {a:1, b:2, c:3, d:4, e:5 };
const abc = { ...test, f: 6};

但是使用这种方法,我以后必须删除不需要的密钥(在我的例子中是d、e)。

(最佳案例解决方案:如果我们不必跟踪不需要的键。可能有 n 个不需要的键。)

【问题讨论】:

  • 只需写一个helper function。任何合理命名的助手都可能比一些超级复杂的解构/重组更具可读性。

标签: javascript object ecmascript-6 destructuring


【解决方案1】:

使用解构参数和 IIFE(立即调用的函数表达式),我们可以摆脱源对象中不需要的键。

const test = {a:1, b:2, c:3, d:4, e:5 };
const abc = (({a,b,c}) => ({a, b, c}))(test);
console.log(abc);

为了兼容 ES5,

var test = {a:1, b:2, c:3, d:4, e:5 };
    
var abc = (function (test) {
  return {
    a: test.a,
    b: test.b,
    c: test.c
  }
})(test);

console.log(abc);

【讨论】:

    【解决方案2】:

    如果您知道新对象中需要的特定键,我会使用旧的 Object.assign

    const extendInfo = { //object containing properties to extend other object  }
    const abc = { //your obj to extend }
    Object.assign(abc, { a: extendInfo.a, b: extendInfo.b, c: extendInfo.c });
    

    如果你有很多道具来提取语法变得更重,我会建议一种不同的方法,但如果它只是几个道具,我认为这是更清洁和更快的方法 - 如果你不这样做,从技术上讲是一条线' t count 变量声明

    【讨论】:

      【解决方案3】:

      您可以使用object rest 来解构您的初始对象:

      const test = {a:1, b:2, c:3, d:4, e:5 };
      const {d, e, ...abc} = { ...test, f: 6};
      
      console.log(abc);

      【讨论】:

      • 这专门用于排除键 d 和 e - 我认为问题是针对任意数量的未知键?
      • 如果测试包含大量key,那么开销会很大,你只需要三个
      • @FabioLolli 也许。不过,聪明的答案。
      • 感谢您的回答,但我正在寻找 - 任意数量的未知键。
      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 2018-04-12
      • 2021-09-09
      • 2019-12-30
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多