作者:mobiledu2502875213 | 来源:互联网 | 2023-10-17 15:49
一维数组与二维数组互相转换 一、二维数组转一维数组 1.1 使用 reduce 实现
var arr1 = [[1, 2], [3, 4], [5, 6], [7]];
function toArrayOne(pre, value, index, array) {
return pre.concat(value);
}
var arr2 = arr1.reduce(toArrayOne);
console.log(arr2 );
reduce 还可以实现数组求和,求数组最大值/最小值。
1.2 使用 apply 实现
var arr1 = [[1, 2], [3, 4], [5, 6], [7]];
var arr2 = [].concat.apply([], arr1); // apply() 第一个参数传入执行concat()操作的对象,既[],第二个参数传入一个数组
console.log(arr2 );
二、一维数组转二维数组 2.1 分类转换
var arr1 = [2, 2, 2, 5, 5, 6, 6, 6, 6, 7];
function toArrayTwo(pre, value) {
pre[value] = (pre[value] || []).concat(value);
return pre;
}
function filterArray(value) {
return value;
}
var arr2 = arr1.reduce(toArrayTwo, []).filter(filterArray);
console.log(arr2 );
2.1 普通转换
// 迭代法
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function toArrayTwo(arr, n) {
if (arr.length === 0) {
return [];
}
if (arr.length < n) {
n = arr.length
}
var arrOne = [arr.slice(0, n)].concat(arguments.callee(arr.slice(n), n));
return JSON.parse(JSON.stringify(arrOne));
}
var arr2 = toArrayTwo(arr1, 2);
console.log(arr2 );
// 截取法
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function toArrayTwo(arr, n) {
var len = arr.length % n === 0 ? arr.length / n : Math.floor(arr.length / n);
var arrOne = [];
for (var i = 0; i <= len; i++) {
var temp = arr.slice(i * n, (i + 1) * n);
arrOne.push(temp); // 兼容对象元素
}
return JSON.parse(JSON.stringify(arrOne));
}
var arr2 = toArrayTwo(arr1, 2);
console.log(arr2 );