数组遍历拆分

clipboard.png
将dubarr如何拆分为如下

clipboard.png
即将dubarr中的数组根据arr中的数组拆分出新的nedubwarr

阅读 2.7k
3 个回答
遍历dubarr
    遍历dubarr的item
        遍历arr
            判断item的item是不是等于当前的arr的
            等于 就截断newdubarr新来一个[]
            不等于就把当前的继续放入旧的数组里面
//不知道理解的对不对
var arr = [ [ 2, 3 ], [ 7, 8 ] ];
var dubarr = [ [ 0, 1, 2, 3, 4, 5 ], [ 7, 8, 9 ]];

function testData(arr,dubarr) {
    var nedubwarr = [];
    var t = [];
    var m = [];
    dubarr.forEach((item,index)=>{
        nedubwarr = nedubwarr.concat(item);
    });
    nedubwarr.forEach((item,index)=>{
        m.push(item);
        if(index%arr[0].length){
            t.push(m.slice());
            m = [];
        }
    });
    (nedubwarr.length % arr[0].length !== 0) && t.push(m);
    return t;
}
console.log(testData(arr,dubarr));

Hmmmmm....这个很麻烦啊,而且有些需求不是很明确

我可以先提供一个helper function:

function cutArr(arr, cutter) {
    var cutter = cutter.join(); 
    return arr.join()
              .split(cutter)
              .join('#' + cutter + '#')
              .split('#')
              .filter(ele => ele !== "")
              .map(ele => ele.split(",").filter(el => el !== ""));
}

console.log(cutArr([0,1,2,3,4,5], [2,3]));

这个可以用来把一个数组拆分开来。接下来就不是很明确了,dubarrarr里的元素是一一对应,还是一对多,还是多对多?复杂程度依次递增。

按照问题里的情况(最简单的一对一):

var arr = [[2, 3], [7, 8]];
var dubarr = [[0,1,2,3,4,5], [7,8,9]];

var i = 0;
var newdubarr = dubarr.reduce( (acc, ele) => acc.concat(cutArr(ele, arr[i++])), []);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题