javascript - React js重命名和解构数组长度

标签 javascript reactjs ecmascript-6 object-destructuring

我有一个如下所示的归约函数:

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(请参阅我的个人资料中的链接):

Figure 7-1 from JavaScript: The New Toys

<小时/>

您还可以使用速记符号并在回调中使用 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

关于javascript - React js重命名和解构数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59875226/

相关文章:

javascript - 如何在 Canvas 上拖动多个形状? [动力学]

javascript - jquery carousel 在 Chrome 或任何 webkit 浏览器中无法正常运行

javascript - 如何通过套接字正确地与 Kafka Broker 通信?

javascript - 使用状态切换 CSS 类

javascript - 作为参数传递的函数应该使用同一调用中的另一个参数

javascript - 更好的缓存以消除帧丢失

javascript - 在 React 项目中保护 .env 参数

javascript - 多行函数调用的 eslint 规则

javascript - Es6 React 组件引用

reactjs - React-Bootstrap 导入 NavBar 模块