【问题标题】:ES6 change object vaues shorthandES6 更改对象值的简写
【发布时间】:2017-01-25 02:43:21
【问题描述】:

在我看来,曾经见过比这更短的解决方案:

let obj = { id: 12345, name: "Some name", desc: "Description" }

someFunction(id, name, desc) {
  obj.id = id;
  obj.name= name;
  obj.desc= desc;
}

谁能告诉我是否有更快的方法来分配具有相同名称的新值?

【问题讨论】:

  • 类似Object.assign?
  • 您要覆盖obj 的当前属性,还是使用新属性创建obj 的新版本?
  • 注意:最好将 obj 作为参数传递给您的函数。

标签: javascript ecmascript-6 shorthand


【解决方案1】:

我想你在找Object.assign()

let obj = {id: 12345, name: 'Some name', desc: 'Description'}
Object.assign(obj, {id: 54321})
console.log(obj) // {id: 54321, name: 'Some name', desc: 'Description'}
Object.assign(obj, {id: 123, name: 'Some other name', desc: 'New description'})
console.log(obj) // {id: 123, name: 'Some other name', desc: 'New description'}

【讨论】:

  • 这是Object.assign 的坏方法。目标应该是一个空对象。您的代码将更改源对象 developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
  • @PraneshRavi,从这个问题看来,突变确实是 OP 的目的
  • @PraneshRavi 我不同意。如果它应该始终是一个空对象,那么指定目标对象的目的是什么?而且我认为 OP 想要改变对象。
  • 这个obj = {id, name, desc} 将解决。为什么使用Object.assign
  • @PraneshRavi 不知道你的意思是什么。如果合并是您想要做的,那么合并是对Object.assign 的完全有效使用。在这种情况下,它可能是 OP 想要的。
【解决方案2】:

你指的是属性简写吗?

let id = '12345';
let name = 'Some name';
let desc = 'Description';

let obj = { id, name, desc };

【讨论】:

  • 你能展示如何使用这个重写 OP 的 someFunction 代码吗?
  • @torazoburo,为什么需要重写该函数,当它替换该函数时,使后者变得不必要。
  • @trincot 怎么样?我们也不能假设该函数是真正的代码(实际上它可能会做更多的事情),也不能假设该对象应该被替换。
  • @zeroflagL,我们确实不应该假设该对象应该被替换(这是这个答案的弱点,参见我对 Gothdo 答案的评论),但这并不意味着 someFunction 需要为了分配属性值而重写。 IMO 对这个问题的解释非常严格。
【解决方案3】:

你可以使用Object.assign:

function someFunction(id, name, desc) {
  Object.assign(obj, {id, name, desc});
}

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2021-08-30
    • 2021-11-04
    • 2016-09-18
    • 2021-12-21
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多