我需要根据从另一个数组中搜索元素将一个数组拆分为 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
- 先遍历
test2
数组,匹配test
的索引
- 然后使用起始值为
ind+1
的 forloop。它将以分隔符 的下一个参数为目标
- 使用
acc[b].push()
将值传递给数组后
- 然后使用
test2.indexOf(test[i]) == -1
检测下一个定界符 condition.That 需要再次打破 statement.Then 开始 test2
的第二个参数
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);
我需要根据从另一个数组中搜索元素将一个数组拆分为 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
- 先遍历
test2
数组,匹配test
的索引
- 然后使用起始值为
ind+1
的 forloop。它将以分隔符 的下一个参数为目标
- 使用
acc[b].push()
将值传递给数组后
- 然后使用
test2.indexOf(test[i]) == -1
检测下一个定界符 condition.That 需要再次打破 statement.Then 开始test2
的第二个参数
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);