判断是否是数组的方法
- Object.prototype.toString.call(arr);
- arr instanceof Array;
- arr.constructor === Array;
- Array.isArray(arr);
var arr = [1, 3];
var obj = {};
console.log(Object.prototype.toString.call(arr));
console.log(arr instanceof Array);
console.log(arr.constructor === Array);
console.log(Array.isArray(arr));
console.log(Object.prototype.toString.call(obj));
console.log(obj instanceof Array);
console.log(obj.constructor === Array);
console.log(Array.isArray(obj));
数组去重
测试:
let arr = [1, 3, 5, 2, 3, 7, 6, 9, 2];
console.time('dedup');
let dedupArr = arr.dedup();
console.log(dedupArr);
console.timeEnd('dedup');
第一种方法:
Array.prototype.dedup = function () {
return [...new Set(this)]
}
第二种方法:
Array.prototype.dedup = function () {
let arr = [];
let obj = {};
this.forEach(item => {
if (!obj[item]) {
arr.push(item);
obj[item] = 1;
}
})
return arr;
}
第三种方法
Array.prototype.dedup = function () {
let arr = [];
this.forEach(item => {
if (arr.indexOf(item) === -1) {
arr.push(item);
}
})
return arr;
}
第四种方法
Array.prototype.dedup = function () {
let arr = [];
this.forEach((item, index) => {
if (this.indexOf(item) === index) {
arr.push(item);
}
})
return arr;
}
由于数组写的比较简单,所以用时差不多。
数组随机排序
一个1 - 10 的数组随机排序
new Array(10).fill(1).map((item, index) => index + 1).sort(() => Math.random() < .5 ? 1 : -1)
数组的深复制(深拷贝)
第一种方法:扩展运算符
var arr = [2, 6, 9, 12];
var arr1 = [];
[...arr1] = arr;
arr1[1] = 5;
console.log(arr, arr1);
第二种方法: slice()
var arr = [2, 6, 9, 12];
var arr1 = arr.slice();
arr1[1] = 5;
console.log(arr, arr1);
第三种方法: concat()
var arr = [2, 6, 9, 12];
var arr1 = arr.concat();
arr1[1] = 5;
console.log(arr, arr1);
第四种方法: map()
var arr = [2, 6, 9, 12];
var arr1 = arr.map(item => item);
arr1[1] = 5;
console.log(arr, arr1);
第五种方法: filter()
var arr = [2, 6, 9, 12];
var arr1 = arr.filter(() => true);
arr1[1] = 5;
console.log(arr, arr1);