Skip to content
On this page

手写数组去重

1、利用Array.prototype.indexOf()方法,如果不存在返回-1

js
Array.prototype.unique = function() {
	const newArray = [];
  // 使用forEach遍历
	this.forEach(item => {
        // !newArray.includes(item)
		if(newArray.indexOf(item) == -1){	// 如果新数组中不存在该元素,则将该元素push到新数组
			newArray.push(item);		
		}
	});
	return newArray;
}

2、利用对象的key不重复的特性去重

js
Array.prototype.unique = function () {
  const newArray = [];
  const tmp = {};
  for (let i = 0; i < this.length; i++) {
    // 使用JSON.stringify()进行序列化
    if (!tmp[typeof this[i] + JSON.stringify(this[i])]) {
      // 将对象序列化之后作为key来使用
      tmp[typeof this[i] + JSON.stringify(this[i])] = 1;
      newArray.push(this[i]);
    }
  }
  return newArray;
}

3、ES6中的Set对象。

js
Array.prototype.unique = function() {
    return Array.from(new Set(arr))
    // or return [...new Set(arr)]
}

总结:

  • 从性能上出发:最优的数组去重算法是采用Map数据结构实现的算法。

  • 从写法简洁上出发:最合适的数组去重算法是采用Set数据结构实现的算法。

Released under the MIT License.