所有平铺
使用es6的falt
let newarr = arr.flat(1);
console.log(newarr);
使用toString()或者join()
var str = arr
.join(',')
.split(',')
.map((item) => {
return parseFloat(item);
});
正则替换
let str = JSON.stringify(arr).replace(/\[|\]/g, '');
let newarr = JSON.parse(`[${str}]`);
console.log(newarr);
循环+concat+push
function flat(newarr) {
let result = [];
for (let i = 0; i < newarr.length; i++) {
if (Array.isArray(newarr[i])) {
result = result.concat(flat(newarr[i]));
} else {
result.push(newarr[i]);
}
}
return result;
}
根据深度平铺
循环+concat+push
function flat(newarr = [], depth = 1) {
let result = [];
(function flattend(arr, depth) {
arr.forEach(function (item) {
if (Array.isArray(item) && depth > 0) {
flattend(item, depth - 1);
} else {
result.push(item);
}
});
})(newarr, depth);
return result;
}
reduce
function flat(arr, depth = 1) {
if (depth <= 0) {
return arr;
}
// return arr.reduce((pre, acc) => {
// if (Array.isArray(acc)) {
// return pre.concat(flat(acc, depth - 1));
// } else {
// return pre.concat(acc);
// }
// }, []);
return arr.reduce(
(pre, acc) => pre.concat(Array.isArray(acc) ? flat(acc, depth - 1) : acc),
[]
);
}
其他方法(仅供参考)
// var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
// function flatten(arr) {
// const stack = [...arr];
// const res = [];
// while (stack.length) {
// // 使用 pop 从 stack 中取出并移除值
// const next = stack.pop();
// if (Array.isArray(next)) {
// // 使用 push 送回内层数组中的元素,不会改动原始输入
// stack.push(...next);
// console.log('1', stack);
// } else {
// res.push(next);
// console.log('2', stack);
// }
// }
// // 反转恢复原数组的顺序
// return res.reverse();
// }
// flatten(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
// const arr = [1, [[2]], 3];
// function flatten(arr) {
// while (arr.some((item) => Array.isArray(item))) {
// console.log(...arr);
// arr = [].concat(...arr);
// console.log(arr);
// }
// return arr;
// }
// console.log(flatten(arr));

本文详细介绍了JavaScript中将多维数组转换为一维数组的五种方法:包括使用ES6的`flat()`方法,结合`toString()`、`join()`、`split()`和`map()`,正则替换,递归循环以及`reduce()`。每种方法都有其独特之处,适用于不同的场景需求,为开发者提供了灵活的选择。
1181

被折叠的 条评论
为什么被折叠?



