📄 Find Value in Array
1. 在陣列中找唯一值
I. 使用 Set(ES6)
const array = [6, 4, 3, 2, 4, 1, 6, 3, 2];
const findUniqueValue = (arr) => {
const uniqueValues = new Set(arr);
return [...uniqueValues];
};
console.log(findUniqueValue(array)); // [6, 4, 3, 2, 1]
II. 使用 filter
const array = [6, 4, 3, 2, 4, 1, 6, 3, 2];
const findUniqueValue = (arr) => {
return arr.filter((value, index, self) => self.indexOf(value) === index);
};
console.log(findUniqueValue(array)); // [6, 4, 3, 2, 1]
2. 在陣列中找只出現一次的值
I. 比對 indexOf
和 lastIndexOf
const array = [6, 4, 3, 2, 4, 1, 6, 3, 2];
const findSingleValue = (arr) => {
return arr.filter((value) => arr.indexOf(value) === arr.lastIndexOf(value));
};
console.log(findSingleValue(array)); // [1]
II. 使用 reduce
const array = [6, 4, 3, 2, 4, 1, 6, 3, 2, 8, 9];
const findSingleValue = (arr) => {
return arr.reduce((acc, value) => {
if (arr.indexOf(value) === arr.lastIndexOf(value)) {
acc.push(value);
}
return acc;
}, []);
};
console.log(findSingleValue(array)); // [1, 8, 9]
III. 使用 Map
來優化效能
達到只使用一次遍歷的目的
const arr = [6, 4, 3, 2, 4, 1, 6, 3, 2, 7, 8, 9];
const findUniqueValuesOptimized = (arr) => {
const uniqueSet = new Set();
const seenSet = new Set();
for (const num of arr) {
if (!seenSet.has(num)) {
uniqueSet.add(num);
seenSet.add(num);
} else {
uniqueSet.delete(num);
}
}
return Array.from(uniqueSet);
};
console.log(findUniqueValuesOptimized(arr)); // [1, 7, 8, 9]
3. 計算單一型別陣列的總和
I 快速使用 for...of
迴圈
const numberArray = [1, 2, 3, 4, 5];
const sumArray = (arr) => {
let sum = 0;
for (const num of arr) {
sum += num;
}
return sum;
};