这些年遇到的数组的应用

208 阅读1分钟

记录这些年项目中或者面试中遇到的一些数组的应用,其中一些也是参考了其他大神的资料

将具有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