按元素将数组分块

5
我应该如何按元素对数组进行分块?
例如,lodash库有一个通过长度将数组分块的函数。
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]

_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]

我有一个像这样的数组 ['a', 'b', '*', 'c'],我能做些什么呢?

chunk(['a', 'b', '*', 'c'], '*')

这将为我提供

[['a', 'b'], ['c']]

这就像是数组的字符串分割


1
你尝试过这个吗?你可以使用 Array.indexOf('*') 获取索引,然后创建子数组。 - Satpal
找到 '*' 的索引,然后将该索引传递给 Array.slice - Dan O
结果 = 数组.join("").split("*").map(function(d){return d.split("")}) - krishnar
3个回答

5
您可以使用数组的Reduce方法:

var arr = ['a', 'b', '*', 'c'];
var c = '*';
function chunk(arr, c) {
    return arr.reduce((m, o) => {
        if (o === c) {
            m.push([]);
        } else {
            m[m.length - 1].push(o);
        }
        return m;
    }, [[]]);
}
console.log(chunk(arr, c));


1
使用传统的for循环:

function chunk(inputArray, el){   

   let result = [];
   let intermediateArr = [];

   for(let i=0; i<inputArray.length; i++){

      if(inputArray[i] == el)
      {
         result.push(intermediateArr);
         intermediateArr=[];
   
      }else {
         intermediateArr.push(inputArray[i]);
      }
    
   }

   if(intermediateArr.length>0) {
      result.push(intermediateArr);
   }

   return result;
       
}

console.log(
  chunk(['a', 'b', '*', 'c', 'd', 'e', '*', 'f'], '*')
)


0

一点点递归。

function chunk (arr, el) {
  const index = arr.indexOf(el);
  var firstPart;
  var secondPart;
  if(index > -1) {
    firstPart = arr.slice(0, index);
      secondPart = arr.slice(index + 1);
  }
  if(secondPart.indexOf(el) > -1) {
   return [firstPart].concat(chunk(secondPart, el));
  }
  return [firstPart, secondPart];
}

console.log(
  chunk(['a', 'b', '*', 'c', 'd', 'e', '*', 'f'], '*')
)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接