使用ES6对象解构从另一个对象创建具有属性和值的对象

时间:2018-10-04 01:22:17

标签: javascript ecmascript-6

我一直在困惑在某些情况下javascript中的对象分解是否适用,而我只是碰到过一种情况。在这段代码中,我只是从this对象中获取属性,并将它们分配给新的data对象上的相同属性/值:

const data = {
    rating: this.rating,
    title: this.title,
    text: this.text,
    name: this.name,
    location: this.location,
    email: this.email,
    files: this.files
};

可以使用某种对象分解来代替它吗?或者它与该用例无关?

2 个答案:

答案 0 :(得分:2)

如果需要this的所有自有属性,则可以使用传播运算符:

const data = {
  ...this
}

如果只需要选择一些,则可以在以后删除不必要的属性,或将它们设置为undefined(尽管这与不存在/已删除的属性不同):

const data = {
  ...this,
  unwantedProp: undefined,
}

答案 1 :(得分:0)

您可以使用类似的东西

const choose = (src, ...keys) => keys.reduce((result, key) => ({ ...result, [key]: src[key] }), {});

用法示例

const choose = (src, ...keys) => keys.reduce((result, key) => ({ ...result, [key]: src[key] }), {});


const src = {
    rating: 1,
    title: 2,
    text: 3,
    name: 4,
    location: 5,
    email: 6,
    files: 7,
    not_me: 8
};

const data = choose(src, 'rating', 'title', 'text', 'name', 'location', 'email', 'files');
console.log(data);

在您的情况下,您在致电select时将使用this而不是src