我需要根据从另一个数组中搜索元素将一个数组拆分为 N 个数组

I need to split an array into N number of arrays based on searching for an element from another array

我需要根据从另一个数组中搜索元素将一个数组拆分为 N 个数组。

想想这个场景

var test = ["1","2","3","env","6","7","8","uat","2344","wersdf","sdfs"];
var test2=["env","uat"];

现在我想要一张像

这样的地图
{
env:["6","7","8"],
uat:["2344","wersdf","sdfs"]
}

注意test2和test1中的数组项是dynamic.But两个test2的值在test数组中不会依次出现,中间会有一些项。

你可以用 Array#Reduce

  1. 先遍历test2数组,匹配test
  2. 的索引
  3. 然后使用起始值为 ind+1 的 forloop。它将以分隔符
  4. 的下一个参数为目标
  5. 使用 acc[b].push()
  6. 将值传递给数组后
  7. 然后使用 test2.indexOf(test[i]) == -1 检测下一个定界符 condition.That 需要再次打破 statement.Then 开始 test2
  8. 的第二个参数

function maper(test, test2) {
  return test2.reduce((acc, b) => {
    let ind = test.indexOf(b); //detect starting index of delimiter
    if (ind > -1) {
      acc[b] = acc[b] || []; 
      for (var i = ind+1; i < test.length; i++) {
        if (test2.indexOf(test[i]) == -1) { //detet next delimiter reach
          acc[b].push(test[i])
        }else{
         break;
        }
      }
    }
    return acc
  }, {})
  
}

var test = ["1", "2", "3", "env", "6", "7", "8", "uat", "2344", "wersdf", "sdfs"];
var test2 = ["env", "uat"];

console.log(maper(test, test2))

var test = ["1","2","3","env","6","7","8","uat","2344","wersdf","sdfs"];
var test2=["env","uat"];
 
var indexArray = [];

test2.map(key=>{
var index = test.indexOf(key);
  indexArray.push(index);
})
 
var obj = {};
for(var i = 0; i<indexArray.length; i++){

  var part = test.slice(indexArray[i]+1, indexArray[i+1]);
   obj = {...obj,[test2[i]]: [ ...part]};
}
console.log("obj = ", obj);