JS如何遍历数组并在数组中的每个空元素上切片/创建一个新数组?

时间:2017-03-21 00:02:44

标签: javascript arrays multidimensional-array

我知道这应该很简单,但我无法弄明白我现在可能已经被剥夺了睡眠。

我有一个这样的数组:

['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']]

我尝试了各种各样的事情。

6 个答案:

答案 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)

你需要一个外部的内部数组和一个简单的迭代

&#13;
&#13;
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;
&#13;
&#13;

Demo

答案 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);