用于解构的函数返回正确的期望值:
[{"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()
相同?
答案 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 k
和v
个变量,并返回右侧值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。因此,您需要先破坏对象,然后再返回破坏性的分配。