可以减少 return 一个包含 2 个值的数组吗?
Can reduce return an array of 2 values?
所以我正在尝试做一个 js 挑战,我必须对 x 数组的索引 0 中的偶数索引和 x 数组的 1 索引中的奇数索引求和,我使用了 map 但我我觉得它可能会更好,因为我正在使用外部数组 return 并且已经映射 return 一个新数组,我的解决方案:
// write code here.
const sumOfArr = [0, 0];
array.map((num, i) => {
return i % 2 === 0 ? sumOfArr[0] += num : sumOfArr[1] += num
});
return sumOfArr
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result);
expect(result).toEqual([180, 105]);
我也尝试过 reduce 但它总是 return NaN:
return array.reduce((acc, num, i) => {
console.log(acc, '---', num, '---', i)
return i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] num
}, [0, 0]);
我整个上午都在尝试发现我在 reduce 上的错误,因为我似乎只需要 reduce 数组到一个更小的数组。
你可以这样做:
function alternatingSums(arr) {
return arr.reduce((acc, n, i) => {
acc[i % 2] += n;
return acc;
}, [0, 0]);
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result); // [180, 105]
你需要return累加器
function alternatingSums(array) {
return array.reduce((acc, num, i) => {
i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] + num; // changed here
return acc; // changed here
}, [0, 0]);
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result);
您的主要问题在于:
return i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] num
在第一次迭代时,它将 return 一个数字,而不是一个数组,因为 acc[0] = acc[0] + num
将 return 分配的值(即:赋值运算符 =
),在本例中为 acc[0] + num
(或在另一种情况下为 acc[1] + num
)。这导致后续调用 acc[0]
和 acc[1]
给出 undefined
,因为数字没有这样的属性。
相反,您每次都需要 return 修改数组。一种可能的方法是 destructuring reduce 回调中的累加器数组,然后添加 return 一个新数组,其中包含修改后的组件:
function alternatingSums(array) {
return array.reduce(([even, odd], num, i) => {
return i % 2 === 0 ? [even+num, odd] : [even, odd+num];
}, [0, 0]);
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log(result); // [180, 105]);
你需要returnacc
只有在操作后i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] + num;
function alternateIndexSums(array) {
return array.reduce((acc, num, i) => {
i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] + num;
return acc;
}, [0, 0]);
}
let myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(alternateIndexSums(myArray));
所以我正在尝试做一个 js 挑战,我必须对 x 数组的索引 0 中的偶数索引和 x 数组的 1 索引中的奇数索引求和,我使用了 map 但我我觉得它可能会更好,因为我正在使用外部数组 return 并且已经映射 return 一个新数组,我的解决方案:
// write code here.
const sumOfArr = [0, 0];
array.map((num, i) => {
return i % 2 === 0 ? sumOfArr[0] += num : sumOfArr[1] += num
});
return sumOfArr
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result);
expect(result).toEqual([180, 105]);
我也尝试过 reduce 但它总是 return NaN:
return array.reduce((acc, num, i) => {
console.log(acc, '---', num, '---', i)
return i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] num
}, [0, 0]);
我整个上午都在尝试发现我在 reduce 上的错误,因为我似乎只需要 reduce 数组到一个更小的数组。
你可以这样做:
function alternatingSums(arr) {
return arr.reduce((acc, n, i) => {
acc[i % 2] += n;
return acc;
}, [0, 0]);
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result); // [180, 105]
你需要return累加器
function alternatingSums(array) {
return array.reduce((acc, num, i) => {
i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] + num; // changed here
return acc; // changed here
}, [0, 0]);
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result);
您的主要问题在于:
return i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] num
在第一次迭代时,它将 return 一个数字,而不是一个数组,因为 acc[0] = acc[0] + num
将 return 分配的值(即:赋值运算符 =
),在本例中为 acc[0] + num
(或在另一种情况下为 acc[1] + num
)。这导致后续调用 acc[0]
和 acc[1]
给出 undefined
,因为数字没有这样的属性。
相反,您每次都需要 return 修改数组。一种可能的方法是 destructuring reduce 回调中的累加器数组,然后添加 return 一个新数组,其中包含修改后的组件:
function alternatingSums(array) {
return array.reduce(([even, odd], num, i) => {
return i % 2 === 0 ? [even+num, odd] : [even, odd+num];
}, [0, 0]);
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log(result); // [180, 105]);
你需要returnacc
只有在操作后i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] + num;
function alternateIndexSums(array) {
return array.reduce((acc, num, i) => {
i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] + num;
return acc;
}, [0, 0]);
}
let myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(alternateIndexSums(myArray));