为什么这个reduce方法没有返回对象?

3

[['id', '1111'], ['name', 'aaaaa']]

我有一个类似于这样的列表。

{ id: '1111', name: 'aaaa' }

我想要将该列表转换为以下格式。

因此,我尝试使用JavaScript的reduce方法将该列表转换为该格式中的对象,如下所示。

但是,它不起作用!

请问有人可以告诉我我做错了什么以及如何修复它吗?

代码

const result = [['id', '1111'], ['name', 'aaaaa']].reduce(
    (accumulator, list, index) => {
        const KEY = list[0];
        const VALUE = list[1];

        console.log(accumulator)

        if(KEY === 'id' || KEY === 'name') {
            return accumulator[KEY] = VALUE;
        }

        return accumulator

    },
    {
        id: '',
        name: ''
    }
);

来自console.log(accumulator)的日志

{ id: '', name: '' }
1111 // why this is not { id: '1111', name: '' } ???

期望结果

{ id: '1111', name: 'aaaa' }

移除你的 if 语句内部的 return - 4castle
3个回答

2

在reduce回调函数中,应该返回accumulator,但是accumulator[KEY] = VALUE语句的结果不是accumulator,因此请在if语句中删除return关键字:

if(KEY === 'id' || KEY === 'name') {
    accumulator[KEY] = VALUE;
}

1
这段代码正在返回一个值...请删除return语句。
    if(KEY === 'id' || KEY === 'name') {
        return accumulator[KEY] = VALUE;
    }

    if(KEY === 'id' || KEY === 'name') {
         accumulator[KEY] = VALUE;
    }

1
只返回一次。在条件语句中仅设置属性。
if(KEY === 'id' || KEY === 'name') {
   /*return*/ accumulator[KEY] = VALUE;
   // ^^ remove the return
}

否则你没有返回完整的对象


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接