块元数据元素

时间:2017-09-28 12:07:48

标签: javascript arrays split

我如何按元素块化数组?

例如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']]

类似于字符串拆分

3 个答案:

答案 0 :(得分:5)

您可以使用array.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 :(得分: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'], '*')
)

答案 2 :(得分:0)

一点点递归。

&#13;
&#13;
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'], '*')
)
&#13;
&#13;
&#13;