我有两个数组:array1和array2.因此,array1将根据内部元素array2进行拆分.例如:
- array1["1","2","3","4","5","6"]
- array2["2","5"]
我的代码:
- var prev = 0;
- newArray = [];
- for (var ii in array2) {
- var index = array1.indexOf(array2[ii]);
- if (index != prev) {
- newArray.push(array1.slice(prev,index));
- prev = index;
- }
- }
- newArray.push(array1.slice(prev));
结果将是:
- ["1"],["2","4"],["5","6"]
但是现在我面临的问题是array1的元素可能没有按顺序排列.例如:[“1”,“5”,“3”,“4”,“2”,“6”].所以基于我的代码,它将错误地拆分array1,因为array2中的第一个元素是“2”,所以它已经将array1分成两个[“1”,“4”],[ “2”,“6”].接下来当“5”时,它找不到它.
预期的结果是:[“1”],[“5”,[“2”,“6”]
那么如何基于array2拆分array1,无论array1是按升序,降序还是随机顺序.对不起,我的英语不好.希望你们能理解.
解决方法
试试这个.它遍历array1并将每个项目推送到临时数组中.当在array2中找到该项时,临时数组将被推入最终数组,然后重置.
- var array1 = ["1","6"];
- var array2 = ["2","5"];
- var newArray = [];
- var currArray = [];
- for (let i = 0; i < array1.length; i++) {
- // Item exists in array2. Add to newArray and reset currArray
- if (i > 0 && array2.includes(array1[i])) {
- newArray.push(currArray);
- currArray = [];
- }
- currArray.push(array1[i]);
- }
- newArray.push(currArray); // Add final currArray to newArray
- console.log(newArray); // print result
另外,如果索引顺序很重要(如在您的情况下),最好不要使用for..in
迭代数组,因为它不会以任何特定顺序返回索引.更多信息here.