【问题标题】:Adding fields to js objects, in functional way以功能方式向 js 对象添加字段
【发布时间】:2017-08-27 05:02:11
【问题描述】:

我在 node.js 中有一个包含一组字段的对象数组。让我们说

let arr = [ {a:1,b:2}, {a:3,b:6}]

我想扩展所有对象并分配给一个新变量。我的幼稚做法是这样的

let arr2 = arr.map(x => x.c = x.a + x.b )

但是,箭头函数返回 x.a+x.b 值,而不是 x 对象,所以这不会像我希望的那样工作。它还改变了 arr 的位置,这是非常无功能且令人困惑的。

我对 js 比较陌生,所以也许我从一开始就想错了。这种对象扩展的地道 js 表达方式是什么?

【问题讨论】:

    标签: javascript arrays node.js functional-programming


    【解决方案1】:

    您可以使用Object.assign 将一个对象的所有属性写入另一个对象:

    const arr2 = arr.map(x => Object.assign({c: x.a + x.b}, x));
    

    也许在未来的某个时候对象传播(尚未标准化):

    const arr2 = arr.map(x => ({...x, c: x.a + x.b}));
    

    【讨论】:

    • 不错!正是我所希望的! :D
    【解决方案2】:

    你可以用这个

    let arr2 = arr.map(x => {
          x.c = x.a + x.b;
          return x;
    });
    

    另请参考工作sn-p

    let arr = [ {a:1,b:2}, {a:3,b:6}];
    let arr2 = arr.map(x => {
      return Object.assign({c : x.a + x.b},x);
    });
    
    
    console.log(arr);
    console.log(arr2);
    console.log(arr);

    【讨论】:

    • 对不起。这将覆盖arr, :(
    【解决方案3】:

    虽然与其他答案的总体思路相同,但这可能更具可读性:

    arr.map(({a, b}) => ({a, b, c: a + b}))
    

    【讨论】:

    • 嗯我喜欢这个^_^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2020-04-10
    • 2015-04-10
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多