数组黑科技(偏性能方面)未完待更新...
数组去重最优解: Array.prototype.unique = function () { var tmp = new Map(); return this.filter(item => { return !tmp.has(item) && tmp.set(item, 1); }) }
搭配使用 Array.from('foo'); // ["f", "o", "o"] let s = new Set(['foo', window]); Array.from(s); // ["foo", window] let m = new Map([[1, 2], [2, 4], [4, 8]]); Array.from(m); // [[1, 2], [2, 4], [4, 8]] Array.from([1, 2, 3], x => x + x); // [2, 4, 6] 去重 function combine(){ let arr = [].concat.apply([], arguments); //没有去重复的新数组 return Array.from(new Set(arr)); } var m = [1, 2, 2], n = [2,3,3]; console.log(combine(m,n));
如果只谈性能,显然是 for > forEach > map,为什么 for 的性能比较好?读一下 forEach 和 map 的规范就知道了。map 会返回一个等长数组,forEach 不会,所以 forEach 大于 map。
但是哪个快和应该使用哪个,并不应该划等号。
如果你需要将数组按照某种规则映射为另一个数组,就应该用 map。
如果你需要进行简单的遍历,用 forEach 或者 for of。
如果你需要对迭代器进行遍历,用 for of.
如果你需要过滤出符合条件的项,用 filter.
如果你需要先按照规则映射为新数组,再根据条件过滤,那就用一个 map 加一个 filter。
如果你需要将数组按照某种规则映射为另一个数组,就应该用 map。
如果你需要进行简单的遍历,用 forEach 或者 for of。
如果你需要对迭代器进行遍历,用 for of.
如果你需要过滤出符合条件的项,用 filter.
如果你需要先按照规则映射为新数组,再根据条件过滤,那就用一个 map 加一个 filter。