我也是最近复习 上代码把
第一种方法: 循环遍历每一个对象 通过indexOf判断新数组有没有这个值,没有就加入 然后返回这个心数组
let arr = [1, 3, 4, 5, 6, 7, 1, 2, 3, 4, 3, 2, 2, 3, 1] let newArr = [] arr.forEach((item, i) => { if(newArr.indexOf(item) === -1) { newArr.push(item) } return newArr })
这里也可以延伸出includes()
let arr = [1, 3, 4, 5, 6, 7, 1, 2, 3, 4, 3, 2, 2, 3, 1,2]
let newArr = []
arr.forEach(item => {
if(!newArr.includes(item)) {
newArr.push(item)
}
})
第二种方法: 不新建数组 在原数组上进行操作,因为这个里边会有数组塌陷问题,所以在第二层循环J--
for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length ; j++) { if(arr[i] == arr[j]) { arr.splice(j, 1) j-- } } }
在性能上可以将 变量 = arr,length 这样循环的时候更好
第三种方法:利用对象
let arr = [1, 3, 4, 5, 6, 7, 1, 2, 3, 4, 3, 2, 2, 3, 1,2] let obj = {}, newArr = [] for (let i = 0, num = arr.length; i < num; i++) { if(!obj[arr[i]]) { obj[arr[i]] = 'asd' newArr.push(arr[i]) } }
Array.prototype.unique = function() { let temp = {}, arr = [], len = this.length for (var i = 0; i < len; i++) { if(!temp[this[i]]) { temp[this[i]] = this[i] arr.push(this[i]) } } return arr }