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

问题描述 投票:0回答:5

我有一个像这样的数组:

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

我尝试过各种事情。

javascript arrays multidimensional-array
5个回答
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)
  }
})

基本上,如果找到

''
,您只需单步执行并推送到新数组即可。我认为最简单的答案。

小提琴这里


如果你真的想用

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
}, [[]])

小提琴这里


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


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

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

演示


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

© www.soinside.com 2019 - 2024. All rights reserved.