我需要了解以下代码是如何工作的.从数组到对象的步骤是什么


const arr = [1, 3, 1, 2, 5, 2, 3, 4, 1, 2, 3, 4, 3]
const resultado = arr.reduce((prev, cur) => ((prev[cur] = prev[cur] + 1 || 1), prev), {})
//resultado = const resultado = { 1: 3, 2: 3, 3: 4, 4: 2, 5: 1,}

我是javascript的新手,我需要了解在下面的代码中,数组是如何以对象结束的。

  1. 创建一个空对象
  2. 对于阵列中的每个元素:
  • 将[当前值加1时对象的值,但如果不存在,则将其值返回1]给当前索引值的键
  • 返回对象,使其在下一次迭代中可用,并在最后用于最终索引

reduce的工作原理是传入一个初始的";值";回叫作为";累加器";。累加器将是回调的第一个参数,数组迭代中的当前元素将是第二个。累加器在每次迭代中传递。

在这个简单的例子中,我们将把一些数字加起来。我们传入0作为初始值。这将作为";累加器";(acc(。c是迭代中的当前元素。

在第一次迭代中,CCD_ 5是CCD_。在第二次迭代中是1(0+1(。在第三次迭代中,它是3(1+2(-总是加上当前元素的值,然后传递回回调,直到没有更多元素为止。

const arr = [1, 2, 3, 4, 5];
const out = arr.reduce((acc, c) => {
return acc + c;
}, 0);
console.log(out);

中的例子你的问题遵循相同的逻辑,但因为它都在一行上,所以更难理解,所以在这里它被扩展了:

  1. 我们传入的不是0作为初始值,而是一个空对象
  2. 如果对象的键与当前元素的值匹配,则将1添加到该属性值,否则将该属性值初始化为1
  3. 返回下一次迭代的累加器

const arr = [1, 3, 1, 2, 5, 2, 3, 4, 1, 2, 3, 4, 3];
const resultado = arr.reduce((acc, c) => {
if (acc[c]) {
++acc[c];
} else {
acc[c] = 1;
}
return acc;
}, {});
console.log(resultado);

最新更新