lambda 函数中的解构 returns 意外值
destructuring in lambda function returns unexpected value
正确,函数与解构一起使用时返回的预期值:
[{"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 函数内部使用解构,使其 returns 与上面使用显式 function()
相同?
这对我有用:
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 };
})));
您可以在 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; }
这是因为这段代码造成的
{k, v} = x;
实际上返回的不是 {k, v} 而是 x。所以你需要破坏对象而不是首先返回破坏性的赋值。
表达式 ({k, v} = x)
分配给 global k
和 v
变量,returns 右侧值 x
。所以你基本上有一个恒等函数 x => x
.
你应该在参数中使用解构,并构建一个 :
[…].map( ({k, v}) => ({k, v}) );
正确,函数与解构一起使用时返回的预期值:
[{"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 函数内部使用解构,使其 returns 与上面使用显式 function()
相同?
这对我有用:
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 };
})));
您可以在 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; }
这是因为这段代码造成的
{k, v} = x;
实际上返回的不是 {k, v} 而是 x。所以你需要破坏对象而不是首先返回破坏性的赋值。
表达式 ({k, v} = x)
分配给 global k
和 v
变量,returns 右侧值 x
。所以你基本上有一个恒等函数 x => x
.
你应该在参数中使用解构,并构建一个
[…].map( ({k, v}) => ({k, v}) );