【问题标题】:In JavaScript ES6, how do I take just a few properties from a hash? [duplicate]在 JavaScript ES6 中,我如何从哈希中获取一些属性? [复制]
【发布时间】:2016-04-29 09:00:57
【问题描述】:

我有一个具有一些属性的对象。我想提取一些众所周知的属性,跳过任何不存在的属性。

类似这样的:

let x = {a: 1, b: 2, c: 3};
let y = take a, b, d from x; // Not real JS!

y 现在看起来像这样:

{a: 1, b: 2} // Note that d is missing!

是否有执行此操作的运算符或方法?

【问题讨论】:

  • 你可以做delete in.c。但不确定这是否是您想要的,因为它也会从 in 中删除它。您也可以克隆然后删除 c。
  • 请不要使用in 作为变量名,因为它是一个运算符。
  • 删除c不起作用,因为可能有属性d, e, f...
  • 我已将示例更新为使用xy

标签: javascript properties ecmascript-6 clone destructuring


【解决方案1】:

另一种方法是解构:

let {a, b, d} = x;
let y = {a, b, d};

这会自动取出您要使用的属性。 然后你可以用一个对象字面量将它们重新组合在一起,这在 ES6 中不需要你做{ a: a, b : b }。如果名称相同,您可以直接写 { a, b }

在这种情况下,abd 也会被复制。

【讨论】:

  • 而且它还会用不必要的变量污染你的范围:P
【解决方案2】:

试试下面的 -

out = {a: in.a, b:in.b, d:in.d};
out = JSON.parse(JSON.stringify(out));

【讨论】:

  • out = JSON.parse(JSON.stringify(out)); 的目的是什么?
  • 它可以删除任何未定义的属性。
  • 我明白了……这可能值得指出,以及这种方法的缺点。
【解决方案3】:
var copied = {};
var propertiesToCopy = ['a', 'b'];
for (var key in originalObject) {
  if (originalObject.hasOwnProperty(key) && propertiesToCopy.indexOf(key) != -1) {
    copied[key] = originalObject[key];
  }
}

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 2012-01-31
    • 2010-12-19
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多