我知道这应该很简单,但我无法弄明白我现在可能已经被剥夺了睡眠。
我有一个这样的数组:
['a 3', 'b', 'c 145', '', 'e', 'f 98', '', 'g 1', 'h', '', 'bla', 'bla']
我想通过拆分每个''来创建列,所以它看起来像这样:
[['a 3', 'b', 'c 145'], ['e', 'f 98'], ['g 1', 'h'], ['bla', 'bla']]
我尝试了各种各样的事情。
答案 0 :(得分:1)
你可以做这样简单的事情:
const arr = ['a 3', 'b', 'c 145', '', 'e', 'f 98', '', 'g 1', 'h', '', 'bla', 'bla']
const output = [[]]
arr.forEach(i => {
if(i === ''){
output.push([])
}else{
output[output.length - 1].push(i)
}
})
基本上,如果找到''
,您只需单步执行并推送到新数组。最简单的答案imo。
小提琴here
如果你真的想用reduce
来做,你可以修改它以执行以下操作:
const arr = ['a 3', 'b', 'c 145', '', 'e', 'f 98', '', 'g 1', 'h', '', 'bla', 'bla']
const output = arr.reduce((a, i) => {
if(i === ''){
a.push([])
}else{
a[a.length - 1].push(i)
}
return a
}, [[]])
小提琴here
答案 1 :(得分:0)
var arr = ['a3', 'b', 'c145', '', 'e', 'f98', '', 'g0', 'h', '', 'bla', 'bla'],
array = [];
res = arr.reduce(function(s,a){
if (a != '') {
array.push(a);
} else {
s.push(array);
array = [];
}
return s;
}, []);
!array.length ? null : res.push(array);
console.log(res);
答案 2 :(得分:0)
尝试以下方法:
var myArray = ['a3', 'b', 'c145', '', 'e', 'f98', '', 'g0', 'h', '', 'bla', 'bla'];
var newArray = [];
var elem = [];
if(myArray[myArray.length - 1] != ''){myArray.push('');}
myArray.filter(function(value, index){
if(value === ''){
newArray.push(elem);
elem = [];
}
else{
elem.push(value);
}
});
console.log(newArray);
答案 3 :(得分:0)
快速回答
//given example
var inital_arr = ['a3', 'b', 'c145', '', 'e', 'f98', '', 'g0', 'h', '', 'bla', 'bla'];
function process_arr(array){
//will be returned once function is complete
var output = [];
//holds array columns until the next ''
var holding_var = [];
//goes through entire array
for(var i = 0; i < array.length; i++){
//runs if string has content
if(array[i].length > 0){
holding_var.push(array[i]);
//runs if string length is 0
} else if(array[i].length <= 0){
//moves the holding array into the output array
output.push(holding_var);
//resets the holding array
holding_var = [];
}
}
return output;
}
//debuging to show it working
console.log(process_arr(inital_arr));
答案 4 :(得分:0)
你需要一个外部的内部数组和一个简单的迭代
function makeArray(arr) {
outer = [];
inner = [];
arr.map(item => {
if (item !== '') {
inner.push(item);
} else {
outer.push(inner);
inner = [];
}
});
return outer;
}
const arr = ['a 3', 'b', 'c 145', '', 'e', 'f 98', '', 'g 1', 'h', '', 'bla', 'bla'];
const res = makeArray(arr);
console.log(res);
&#13;
答案 5 :(得分:-1)
这是一种更新的方法,它使用reduce并在每次遇到值为''
的元素时启动一个新数组
const arr = ['a3', 'b', 'c145', '', 'e', 'f98', '', 'g0', 'h', '', 'bla', 'bla'];
let start = 0;
const out = arr.reduce((p, c, i) => {
const isLast = i === arr.length - 1;
if (c === '' || isLast) {
let end = isLast ? arr.length : i;
p.push(arr.slice(start, end))
start = i+1;
}
return p;
}, []);
console.log(out);