var arr=[1, [2, [3], 4], 5];
/*
* 先把数组按照都好拆分成字符串,join(',)
* 在把字符串按照逗号拆分成数组,split(',')
* 此时数组中的每一项都为字符串
* 用for of把每一项转化正数字Number(数组中的每一项)*/
Array.prototype.changeArray=function changeArray() {
var str = this.join(',');
var newArr = str.split(',');
for (var i in newArr) {
if(!isNaN(i)){
newArr[i] = Number(newArr[i]);
}
}
return newArr;
};
console.log(arr.changeArray(),'changeArray');
/*递归的思想:
* 循环数组中的每一项如果当前项为数组的话(Array.isArray(item),继续调用函数本身同时传递向函数传递当前项
* 否则的后就把当前项存放在一个新的数组中
* */
Array.prototype.changeArray2=function changeArray2() {
var arr2=[];
var _this=this;
function chang(_this) {
for(var i=0;i<_this.length;i++){
if(Array.isArray(_this[i])){
chang( _this[i]);
}else {
arr2.push(_this[i])
}
}
}
chang(_this);
return arr2;
};
console.log(arr.changeArray2(),'changeArray2');
/*
* 首先把数组转化为字符串
* 用split(',')按照逗号把字符串拆分成数组中对应的每一项,在每一项转化为数字就可以了*/
Array.prototype.changeArray4=function changeArray4() {
var newArr=(this+'').split(',');
newArr=newArr.map(function (item) {
return parseInt(item);
});
return newArr;
};
console.log(arr.changeArray4(),'changeArray4');
//=>采用递归
function changeArray3(arr) {
var newArr = [];
function fun(arr){
for(var i=0;i<arr.length;i++){
if(Array.isArray(arr[i])){
fun(arr[i]);
}else{
newArr.push(arr[i]);
}
}
}
fun(arr);
return newArr;
}
console.log(changeArray3(arr),'changeArray3');
//=>采用递归
var newArr=[];
function change(arr) {
for (let i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])){
change(arr[i]);
}else {
newArr.push(arr[i])
}
}
return newArr;
}
console.log(change(arr),'change');
//=>reduce和递归
/*
* 若果当前项为不是数组吗,就把当前项和前一项利用concat链接起来,
* 如果当前项为数组的,就检测当前项中的每一项是否为数组,如果不为数组就与前一项组合在一起
* 以此类推*/
var flatten = arr => arr.reduce(
(acc,val) => acc.concat(Array.isArray(val)? flatten(val):val),[]);
console.log(flatten(arr),'flatten');
js实现多位数组转化为一位数组
最新推荐文章于 2022-12-08 10:10:24 发布