【问题标题】:role of _ and array reduction_ 和数组缩减的作用
【发布时间】:2019-09-03 19:01:23
【问题描述】:

我有一个使用jsx和redux设置reducer的代码示例如下:

       case Test:
        const { [action.payload.id]: _, ...filteredAlerts } = state.alerts;

        return {
            ...state,
            ...{ 
                alerts:
                {
                    ...filteredAlerts
                }
            }
        };
    default:
        return state;

一切正常,但我完全不明白这一行:

 const { [action.payload.id]: _, ...filteredAlerts } = state.alerts;

谁能提供一个简单明了的解释? 例如这里的_是什么意思?

[action.payload.id]: _

这条线有什么作用?

const { [action.payload.id]: _, ...filteredAlerts } = state.alerts;

【问题讨论】:

    标签: javascript arrays object ecmascript-6 redux


    【解决方案1】:

    它所做的只是将state.alerts 中的某个项目分配给名为_ 的局部变量,然后用... 收集其余项目。本质上,这是将state.alerts except action.payload.id 中的所有属性复制到新的filteredAlerts 变量中。这是一个很长的写法:

    let filteredAlerts = {};
    
    for (let key in state.alerts) {
        if (key != "action.payload.id") {
            filteredAlerts[key] = state.alerts[key];
        }
    }
    

    除非您仍然可以使用_ 访问action.payload.id

    【讨论】:

    • 只是好奇...通常 _ 是 lodash...示例代码使用 _ 作为局部变量名称是否有特殊原因?
    • 没有特别的原因 - 除了 Lodash 和 Underscore,它被用作一般的“忽略此变量”名称。 (除非变量有名称并且只是以_id 之类的下划线开头 - 那么它有点像“这是自动/只读/敏感/重要 - 不要直接修改它”)。
    • 谢谢。那么这意味着代码中有一个隐藏的for循环吗?这种代码风格是 es6 的特性吗?
    • @HamedMinaee 这是一个 ES6 特性,是的,它很可能有一个循环来收集所有属性。
    • 我认为最后一条评论也很重要(而且很有帮助)。这不是 jsx 或 redux 特有的……它是 ES6。
    猜你喜欢
    • 2020-11-10
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多