我有一个如下的reduce函数:
let el = scopes.reduce ((tot, {actions}) => tot + actions.length, 0);
我尝试像这样转换它,但似乎这不是正确的方式:
let el = scopes.reduce ((tot, {actions.length: len}) => tot + len, 0);
有没有一种方法可以做到这一点,或者这是不可能的。
我有一个如下的reduce函数:
let el = scopes.reduce ((tot, {actions}) => tot + actions.length, 0);
我尝试像这样转换它,但似乎这不是正确的方式:
let el = scopes.reduce ((tot, {actions.length: len}) => tot + len, 0);
// Outer −−−−−−−−−−−−−−−−−−−−v−−−−−−−−−−−−−−−−−−−−−−v
let el = scopes.reduce((tot, {actions: {length: len}}) => tot + len, 0);
// Inner −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^−−−−−−−−−−−−^
实例演示:
const scopes = [
{actions: [1, 2, 3]},
{actions: []},
{actions: [4, 5]}
];
let el = scopes.reduce((tot, {actions: {length: len}}) => tot + len, 0);
console.log(el); // 5
source
)向目标(prop
)从右往左流动:let source = 42;
let obj = {prop: source};
// <−−−−−*
prop
)流向目标(target
),方向是从左到右:let {prop: target};
// *−−−−−>
console.log(target); // 42
目标可以是一个变量,一个对象属性,甚至是另一个解构模式。这就是我们在上面使用的: actions
属性的目标是解构模式 {length: len}
,它将 length
的值放入变量 len
中。以下是我新书的第7-1个图(请查看我的个人资料以获取链接):
您还可以使用简写符号并在回调中使用 length
:
let el = scopes.reduce((tot, {actions: {length}}) => tot + length, 0);
实时示例:
const scopes = [
{actions: [1, 2, 3]},
{actions: []},
{actions: [4, 5]}
];
let el = scopes.reduce((tot, {actions: {length}}) => tot + length, 0);
console.log(el); // 5