Set.prototype
如何清除此算法中的任何重复项?
该函数的目的是获取未定义数量的参数(数组(,并从每个数组返回一个唯一值的新数组。
例如,uniqueNums([2, 3, 4, 51], [23, 41, 3, 4, 51, 2], [2, 3, 99])
将返回一个array
[2, 3, 4, 51, 23, 41, 51, 99]
function uniqueNums(...arrays) {
const flatArray = [].concat(...arrays);
return [...new Set(flatArray)];
}
什么是regulat
和multiset
?
首先,concat
用于从所有从属数组创建单层深度数组。
然后,new Set(flatArray)
从flatArray
创建一个可迭代的新集合。从本质上讲,这会创建一个集合并为flatArray
中的每个条目调用add
。Set#add
不会添加集合中已有的值,因此new Set(flatArray)
提供一组唯一值(集合的点是唯一值(。
然后,[...theSet]
使用展开语法来获取Set
(这也是可迭代的(并创建一个新的唯一条目的平面数组。
例如,该代码实际上是这样的:
function uniqueNums(...arrays) {
const flatArray = [].concat(...arrays);
// Create the set
const set = new Set();
// Add the entries; calling `add` with a value that's already in the set
// doesn't do anything
for (const entry of flatArray) {
set.add(entry);
}
// Now `set` has unique values; get an array of them
const result = [];
for (const entry of set) {
result.push(entry);
}
// Return the array
return result;
}