lambda函数中的解构返回意外值

时间:2017-06-13 20:43:38

标签: javascript lambda destructuring

用于解构的函数返回正确的期望值:
[{"k":"key1","v":"val1"},{"k":"key2","v":"val2"},{"k":"key3","v":"val3"}]

console.log(JSON.stringify([{
  k: 'key1',
  v: 'val1',
  z: 'z1'
}, {
  k: 'key2',
  v: 'val2',
  z: 'z2'
}, {
  k: 'key3',
  v: 'val3',
  z: 'z3'
}].map(function(x) {
  let {k, v} = x;
  return {k, v };
})));

但是,当lambda函数与解构一起使用时,返回的值不正确:
[{"k":"key1","v":"val1","z":"z1"},{"k":"key2","v":"val2","z":"z2"},{"k":"key3","v":"val3","z":"z3"}]

    console.log(JSON.stringify([{
      k: 'key1',
      v: 'val1',
      z: 'z1'
    }, {
      k: 'key2',
      v: 'val2',
      z: 'z2'
    }, {
      k: 'key3',
      v: 'val3',
      z: 'z3'
    }].map(x => 
      ({k, v} = x) )));

我如何在lambdas函数中使用destructuring,使其返回与使用上面的显式function()相同?

4 个答案:

答案 0 :(得分:1)

您可以在Array#map

的回调参数内使用解构



let array = [{ k: 'key1', v: 'val1', z: 'z1' }, { k: 'key2', v: 'val2', z: 'z2' }, { k: 'key3', v: 'val3', z: 'z3' }];

console.log(array.map(({ k, v }) => ({ k, v })));

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:1)

表达式({k, v} = x)分配给global kv个变量,并返回右侧值x。所以你基本上得到了一个身份函数x => x

您应该在参数中使用解构,并构建object literal as the return value

[…].map( ({k, v}) => ({k, v}) );

答案 2 :(得分:0)

这对我有用:

console.log(JSON.stringify([{
  k: 'key1',
  v: 'val1',
  z: 'z1'
}, {
  k: 'key2',
  v: 'val2',
  z: 'z2'
}, {
  k: 'key3',
  v: 'val3',
  z: 'z3'
}].map(x => {
  let { k, v } = x;
  return { k, v };
})));

答案 3 :(得分:0)

这是因为此代码

引起的
{k, v} = x; 

实际上并没有返回{k,v}而是x。因此,您需要先破坏对象,然后再返回破坏性的分配。