记录这些年项目中或者面试中遇到的一些数组的应用,其中一些也是参考了其他大神的资料
将具有length属性的对象转换为数组
function toArray (arg) {
return Array.prototype.slice.call(arg, 0);
}
var toArray2 = function (arg) {
try {
return Array.prototype.slice.call(arg, 0);
} catch (e) {
var arr = [];
for (var i = 0; i < arg.length; i++) {
arr[i] = arg[i]; //比push快
}
return arr
}
}
ES6
let arr = Array.from(arg);删除数组中的指定元素
Array.prototype.indexOf = function (val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) {
return i;
}
}
return -1;
};
Array.prototype.remove = function (val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
or
for(var i = 0; i < arr.length; i++) {
if (arr[i]) { //满足的条件
arr.splice(i, 1);
i -= 1; // 下标要改变
}
}
将二维数组变成一维数组
var arr = [[1,2], [4], [88, 43]]
var newArr = [].concat.apply([], arr)
var newArr2 = [].concat(...arr)将多层数组转换为一层数组
const nestedArr = [1, 2, [3, 4, [5, 6]]];
const flatten = arr =>
arr.reduce(
(flat, next) => flat.concat(Array.isArray(next) ? flatten(next) : next),
[]
);
flatten(nestedArr);
function flattenArray(arr) {
const flattened = [].concat(...arr);
return flattened.some(item => Array.isArray(item)) ?
flattenArray(flattened) : flattened;
}
const arr = [11, [22, 33], [44, [55, 66, [77, [88]], 99]]];
const flatArr = flattenArray(arr);将数组拆分成指定长度的小数组
function splitArray (arr, len) {
var aLen = arr.length,
result = [];
for (var i = 0; i < aLen; i+=len) {
result.push(arr.slice(i, i+len));
}
return result;
}将数组随机打乱
var arr = [1,2,3,4];
arr.sort(function() {
return (0.5-Math.random());
})数组的深拷贝
function deepCloneArr (arr) {
var newArr = arr.slice();
return newArr;
}
function deepCloneArr2 (arr) {
var newArr = arr.concat();
return newArr;
}[] == [] // false