方法一:双层循环去重
function uniqueArr(arr) { var result = []; for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j]) { j = ++i; } } result.push(arr[i]); } return result; }
方法二:利用对象的属性不能相同去重
function uniqueArr(arr) { var result = []; var obj = {}; for (var i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { obj[arr[i]] = 1; result.push(arr[i]); } } return result; }
方法三:利用下标
function uniqueArr(arr) { var result = [arr[0]]; for (var i = 1; i < arr.length; i++) { if (result.indexOf(arr[i]) == -1) { result.push(arr[i]); } } return result; }
方法四:filter+indexOf
去除重复元素依靠的是indexOf总是返回第一个元素的位置,
后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了
var arr = [1, 2, 3, 1, 2, 3, 2, 2, 2, 2, 1, 4, 6, 32, 1] arr.filter((item,index)=>{ return arr.indexOf(item) ===index }) // [1, 2, 3, 4, 6, 32]
方法五:new Set()
var arr = [1, 2, 3, 1, 2, 3, 2, 2, 2, 2, 1, 4, 6, 32, 1]; Array.from(new Set([...a]))
判断变量是否为数组
方法一:intanceof
var arr = [1,2,3,4],obj = {a:1,b:2,c:3} arr intanceof Array //true obj intanceof Object //true
方法二:Array.isArray()
var arr = [1,2,3,4],obj = {a:1,b:2,c:3} Array.isArray(arr) //true Array.isArray(obj) // false
方法三:constructor
var arr = [1,2,3,4],obj = {a:1,b:2,c:3} arr.constructor.name //Array obj.constructor.name //Object