gpt4 book ai didi

javascript - 如何使用reduce将数组转换为对象?

转载 作者:行者123 更新时间:2023-12-01 15:59:17 28 4
gpt4 key购买 nike

多亏了另一个SO线程,我通过reduce()设法将数组的数组转换为对象。但是,我不明白为什么会这样。

有人可以向我解释为什么我不能只写=> acc [key] = value,{}吗?这种语法对我来说很有意义。但是它返回21!仅当我在对象分配和起始值,acc之间添加{}时,此方法才有效。此外,ESLint声称它是unexpected use of comma operator

const myArray = [["player1", 30], ["player2", 21]];
const obj = myArray.reduce((acc, [key, value]) => (acc[key] = value, acc), {});

console.log("obj : ", obj);


我也写了这个。它也运行良好,但是我仍然想知道第一个脚本为什么起作用:

const myArray = [["player1", 30], ["player2", 21]];
const obj = myArray.reduce((acc, [key, value]) => Object.assign(acc, {[key]: value}),{});

console.log("obj : ", obj);

最佳答案

使用reduce()时,您需要从回调中返回累加器acc
您需要了解的第二件事是隐式 yield 。当您使用不带=>{}的箭头函数return时,=>之后的值将成为该函数的返回值。

您需要了解的另一件事是逗号运算符。当您在两个或多个表达式之间使用逗号运算符时,它将得出最后一个表达式。

console.log(("first", "second", "third"))


在以上代码段中,整个表达式 ("first", "second", "third")的计算结果为 "third"

(acc[key] = value, acc)评估为 acc的情况下,也会发生同样的情况。

const myArray = [["player1", 30], ["player2", 21]]
const toObj = myArray.reduce((acc, [key, value]) => {
acc[key] = value;
return acc;
})
console.log(toObj)


Could someone please explain to me why I can't only write => acc[key] = value, {} ?



我在上面提到过,当您使用 reduce()时,您需要从ur函数中添加 return acc。因此,您可以使用上述方式从每次迭代中返回 acc[key] = value。并且 acc[key] = value将始终求值为 value,因此整个reduce方法将返回最后一个 value,即 21

关于javascript - 如何使用reduce将数组转换为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62305224/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com