Array.prototype.reduce
是 JavaScript 數組方法之一,用于累積數組的各個值,將其簡化為單個值。下面是一些基礎用法和一些可能被認為奇怪或不太常見的用法:
基礎用法:
- 數組求和:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 輸出 15
- 查找最大值:
const values = [10, 30, 50, 20, 40];
const max = values.reduce((acc, curr) => Math.max(acc, curr), -Infinity);
console.log(max); // 輸出 50
- 數組去重:
const duplicates = [1, 2, 2, 3, 4, 4, 5];
const uniqueValues = duplicates.reduce((acc, curr) => {if (!acc.includes(curr)) {acc.push(curr);}return acc;
}, []);
console.log(uniqueValues); // 輸出 [1, 2, 3, 4, 5]
奇怪的用法:
- 數組平鋪:
const nestedArray = [[1, 2], [3, 4], [5, 6]];
const flatArray = nestedArray.reduce((acc, curr) => acc.concat(curr), []);
console.log(flatArray); // 輸出 [1, 2, 3, 4, 5, 6]
- 對象數組轉對象:
const people = [{ id: 1, name: 'John' },{ id: 2, name: 'Jane' },{ id: 3, name: 'Doe' },
];
const peopleObject = people.reduce((acc, person) => {acc[person.id] = person.name;return acc;
}, {});
console.log(peopleObject); // 輸出 {1: 'John', 2: 'Jane', 3: 'Doe'}
- 條件統計:
const numbers = [1, 2, 3, 4, 5];
const countEvenOdd = numbers.reduce((acc, curr) => {curr % 2 === 0 ? acc.even++ : acc.odd++;return acc;},{ even: 0, odd: 0 }
);
console.log(countEvenOdd); // 輸出 {even: 2, odd: 3}
這些示例展示了 reduce
的一些基礎和創造性的用法。由于 reduce
具有強大的靈活性,它可以應用于許多場景。