JS拍平数组
整理记录一下目前所使用过的JS拍平数组
一、正常JS方法
const arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, 10, 11, 12, 13]],[14, 15]];
function deepFlatten(arr) {
const newarr = [];
const flatten = arr => {
for (let i of arr) {
if (!Array.isArray(i)) {
newarr.push(i);
} else {
newarr.concat(flatten(i))
}
}
}
flatten(arr);
return newarr;
}
console.log(deepFlatten(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
二、es6优化方法
const arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, 10, 11, 12, 13]],[14, 15]];
const deepFlatten = arr=>[].concat(...arr.map(v=>Array.isArray(v)?deepFlatten(v) : v));
console.log(arr); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
.concat()
用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。.map()
原数组被“映射”成对应新数组或者获得对象数组中的特定属性值们。如下例子:
const users = [
{name: "张含韵", "email": "zhang@email.com"},
{name: "江一燕", "email": "jiang@email.com"},
{name: "李小涵", "email": "li@email.com"}
];
const emails = users.map(function (user) { return user.email; });
console.log(emails.join(", ")); // zhang@email.com, jiang@email.com, li@email.com
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭