js实现多位数组转化为一位数组

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');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值