JS在地图内传播运算符不起作用?

时间:2018-12-13 17:17:20

标签: javascript ecmascript-6 lodash

为什么这不起作用(使用Lodash映射功能):

const data1 = [{test:"test"}];
const data2 = _.map(data1, ((item) => {...item, id:1}));

但是这样做:

const data3 = [{test:"test"}];
const data4 = _.map(data3, ((item) => Object.assign({}, item, {id:1})));

在地图外也可以使用:

const data5 = {test:"test"};
const data6 = {...data5, id:1}

4 个答案:

答案 0 :(得分:0)

要返回地图中的对象,需要将其包装在()中。因此,map((item) => {...item, id:1})应该是map((item) => ({...item, id:1}))

const data1 = [{test:"test"}];
const data2 = data1.map((item) => ({...item, id:1}));
console.log(data2);

答案 1 :(得分:0)

在返回带有 ES6 的“组成”对象时,您只是使用了错误的语法。如果您使用的是箭头函数,并且需要隐式返回对象,则需要用()将其包装起来:

Array.map相同。这是ES6的示例,因为lodash在这种情况下实际上并不起作用。

const data1 = [{test:"test"}];
const data2 = data1.map(item => ({...item, id:1}));

console.log(data2)

Rest使用Object.assign为您完成对象合并并返回它,而last只是对象文字。

答案 2 :(得分:0)

在此行const data2 = _.map(data1, ((item) => {...item, id:1})); 不将()放在返回值周围会使解释器认为您正在使用那些{}

打开一个块

尝试将其更改为const data2 = _.map(data1, ((item) => ({...item, id:1})));

答案 3 :(得分:-1)

对于对象文字,您需要这样做

使用{时,它被解释为比使用return所需的功能大括号。

{=>{...item, id:1},这里的{被解释为函数的起始括号,因此传播运算符将引发错误。

const data1 = [{test:"test"}];
const data2 = data1.map((item) => {return{...item, id:1}});
console.log(data2);

PS 对于认为未使用loadash给出答案的失望选民

const data1 = [{test:"test"}];
const data2 = _.map(data1, ((item) => {return {...item, id:1}}));