【问题标题】:ES6 - Clone an object and rename its keys in one line? [duplicate]ES6 - 克隆一个对象并在一行中重命名它的键? [复制]
【发布时间】:2023-04-09 03:37:01
【问题描述】:

有没有办法将object解构克隆到另一个object,并在此过程中重命名它的键?

示例

let getUser = () => { return {first: "Radio", last: "Reve"} }
let {first: firstName, last: lastName} = getUser()

let o = {firstName: firstName, lastName: lastName} // This is the line I don't wanna have to write

有没有一种简单的方法可以将结果存储在一个对象中,而不是两个不同的变量,firstNamelastName

我从服务器收到一个带有 10 个键的对象,我想只选择 2 个键并重命名这些键,没有额外的库,也没有以一致的方式使用本机的特殊函数。

【问题讨论】:

  • var copy = Object.assign({},getUser())
  • 不是真正的重复。我添加了 cmets 来阐明我想要什么
  • @Radioreve 它仍然是重复的。看第一个答案:“也就是说,没有办法“从对象解构为对象”,或者“从对象中挑选为对象”,只能从对象解构为变量。”
  • @str 确实不错。所以这是不可能的……悲伤的脸
  • 您可以将该行缩短为{firstName, lastName},但实际上除了显式构造对象别无他法

标签: javascript object ecmascript-6 clone destructuring


【解决方案1】:

据我所知,目前无法从我使用本地语言语法搜索的内容中找到。

我想出了一个可能有帮助的通用解决方案:

let cloneAndRename = (obj, renames) => {
    let clone = {};
    Object.keys(obj).forEach(function (key) {
        if (renames[key] !== undefined) {
            clone[renames[key]] = obj[key];
        } else {
            clone[key] = obj[key];
        }
    });
    return clone;
}

像这样使用它:

let o = cloneAndRename(getUser(), {first: 'firstName', last: 'lastName'});

【讨论】:

  • 不是我想要的,但谢谢 :) 似乎用基本的单行和语言结构是不可能的......但至少!
  • 更新了我的回答,说它可能还不能使用基本语法来完成。不过,解决方案的逻辑还是没问题的。
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 2019-11-18
  • 2012-06-26
  • 2020-02-03
  • 2018-02-11
  • 1970-01-01
  • 2015-09-16
  • 2018-11-27
相关资源
最近更新 更多