【问题标题】:how to fix Es-lint "no-return-assign" for the following line of code如何为以下代码行修复 Eslint “no-return-assign”
【发布时间】:2019-01-20 18:40:33
【问题描述】:

此代码运行正确(将对象数组转换为对象对象)

ES-lint 然而给出了这个错误:

[eslint] 箭头函数不应返回赋值。 (无返回分配)

请问如何重写以满足 es-lint

var x = arr.reduce((obj, item) => (obj[item.userid] = item, obj), {})

【问题讨论】:

  • 这似乎是一个 ESLint 错误。由于逗号运算符,它没有返回分配。

标签: javascript eslint arrow-functions


【解决方案1】:

你可以使用Object.assign

var x = arr.reduce((obj, item) => Object.assign(obj, {[item. userid]: item}), {})

【讨论】:

    【解决方案2】:

    就我个人而言,我喜欢代码更冗长一些,因为单行代码在今天看起来非常聪明,但是下周当我必须回来修复同一个地方的错误时,它需要一段时间才能理解我在做什么,更不用说是否必须由其他人来修复它。

    我会这样写:

    var x = arr.reduce((obj, item) => {
        obj[item.userid] = item;
        return obj;
    }, {});
    

    这里有一个带有一些虚拟数据的 sn-p 来测试它。

    var arr = [
            {userid: 11},
            {userid: 12},
            {userid: 13},
            {userid: 14},
        ];
    
    var x = arr.reduce((obj, item) => {
        obj[item.userid] = item;
        return obj;
    }, {});
    
    console.log(x);

    【讨论】:

    • 好一个!让我们试着让机器做计算工作,而不是在我们的脑海中尝试做它;)
    • 作为后续问题,是否有任何ES6语法或函数可以直接将对象数组转换为对象对象?
    • @CharlesOkwuagwu 您的意思是使用数组索引作为键的结果对象?例如[{userid: 11}, {userid: 12}] 转换为{0: {userid: 11}, 1: {userid:12}}
    • 不,我的意思是实现与我的示例中的代码相同,但可能使用简化的语法或替代 ES6 实现。本质上类似于 Array.ToObjects 或其等效项(如果存在)
    • 不,方法是使用减速器。也许你可以使用lodash 来实现
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多