var tmp = arr.splice(0,1); // splice 返回【被刪除元素組成的數組】,如 [1]
arr1.push(tmp); // arr1 變為 [[1]],二維數組
if (tmp != arr1[0]) ... // 比較兩個不同數組對象,永遠為 true
splice 返回**新數組**,而非單個元素值。false。
// 1. Set 去重(最簡潔)
function unique(arr) { return [...new Set(arr)]; }
// 2. filter + indexOf(兼容舊環境)
function unique(arr) {
return arr.filter((item, index) => arr.indexOf(item) === index);
}
// 3. reduce + 對象哈希(高性能)
function unique(arr) {
return arr.reduce((acc, cur) => {
if (!acc.map.has(cur)) { acc.map.set(cur, true); acc.arr.push(cur); }
return acc;
}, {map: new Map(), arr: []}).arr;
}
console.log(unique([1,2,'abc',1,3,'abc'])); // [1, 2, 'abc', 3]
採用 Set 或 filter 等現代 API,代碼簡潔、語義清晰、避免手動循環陷阱。