Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第六题:实现一个 chunk 函数 #8

Closed
KieSun opened this issue Mar 14, 2021 · 77 comments
Closed

第六题:实现一个 chunk 函数 #8

KieSun opened this issue Mar 14, 2021 · 77 comments

Comments

@KieSun
Copy link
Owner

KieSun commented Mar 14, 2021

/**
 * @param input
 * @param size
 * @returns {Array}
 */
_.chunk(['a', 'b', 'c', 'd'], 2)
// => [['a', 'b'], ['c', 'd']]

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

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

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

去答题

新建了一个大厂真题每日打卡群,有意愿学习打卡的再进,群已达扫码上线,请加好友拉你进群

@KieSun KieSun added the 阿里 label Mar 14, 2021
@yancongwen
Copy link

function chunk(input, size) {
    size = Math.max(toInteger(size), 0)
    if (!Array.isArray(input)) {
        return []
    }
    if (size < 1) {
        return []
    }
    const n = input.length
    const result = []
    let start = 0
    while (start < n) {
        result.push(input.slice(start, start + size))
        start += size
    }
    return result
}

可以参考lodash源码

@QuXiaoMing
Copy link

const chunk = (arr, len) => arr.reduce((pre, cur, index) => {
  if (index % len === 0) {
    pre.push([cur])
    return pre
  }
  const temp = pre[pre.length - 1]
  temp && temp.push(cur)
  return pre
}, [])

@XianHuiDeDiZhongHai
Copy link

function chunk(arr, len) {
  if (len === 0) return []
  return arr.reduce((prev, item, index) => {
    const value = Math.floor(index / len),
      remainder = index % len
    remainder === 0 ? prev.push([item]) : prev[value].push(item)
    return prev
  }, [])
}

@goldEli
Copy link

goldEli commented Mar 15, 2021

const _ = {};

_.chunk = function (arr, num) {
  const res = [];
  return step(res, arr, 0, num);
};

function step(res, arr, index, num) {
  const len = arr.length;
  if (index >= len || num <= 0) return res;
  const chunk = [];
  for (let i = index; i < index + num; ++i) {
    arr[i] && chunk.push(arr[i]);
  }
  res.push(chunk);
  // console.log(res);
  return step(res, arr, index + num, num);
}

@secret344
Copy link

secret344 commented Mar 15, 2021

function chunk(arr = [], size) {
    let result = [];
    if (size === 0) return result;
    let len = arr.length;
    if (size >= len) return arr;
    if (size > Math.ceil(len / 2)) return [arr.slice(0, size), arr.slice(size)];
    for (let i = 0; i < len; i++) {
        let index = i + size - 1;
        if (index >= len) {
            result.push(arr.slice(i));
            break;
        } else {
            result.push(arr.slice(i, index + 1));
        }
        i = index;
    }
    return result;
}

@ctime-zliang
Copy link

const chunk = (array, size) => {
const res = []
Array.from({ length: Math.ceil(array.length / size) }, (value, index) => {
res.push(array.slice(+value * size, (index + 1) * size))
})
return res
}

@XINXINP
Copy link

XINXINP commented Mar 15, 2021

//_.chunk(array, size)
//根据size参数将数组分组,size是每一组的长度。如果数组不能均分,最后一组就会包含剩下的元素。
let _ = {}
_.chunk  = function (arr,size) {
if(arr.length == 0||!size) return[]
if(arr.length<= size) return arr
let result = []
while (arr.length){
    result.push(arr.splice(0,size))
}
return result
}

@GeekNoble
Copy link

`
function chunk(arr, n) {

  let i = 0, result = []
  if (n == 0 || arr.length == 0) {
    return []
  }

  while(i < arr.length) {
    let chunks = []
    for (let j = 0; j < n && i < arr.length; j++) {
      chunks.push(arr[i])
      i++
    }
    result.push(chunks)
  }

  return result
}

`

@teefing
Copy link

teefing commented Mar 15, 2021

const chunk = (arr, chunkSize) =>
  arr.reduce((acc, cur, index) => {
    index % chunkSize === 0 ? acc.push([cur]) : acc[acc.length - 1].push(cur);
    return acc;
  }, []);

@SunshineZJJ
Copy link

let _={};
			_.chunk=function(arr,length){
				let result=[];
				let num=Math.ceil(arr.length/length);
				let index=0;
				for(let i=0;i<num;i++){
					console.log(index,num,arr,length,arr.slice(index,index+length))
					result.push(arr.slice(index,index+length));	
					index=index+length;
				}
				return result
			}

@Ecaknight
Copy link

function chunk (arr, size) {
    if (!size) return arr
    const len = Math.ceil(arr.length / size)
    const ret = []
    let first = 0
    let end = size
    for (let i = 0; i < len; i++) {
      const temp = arr.slice(first, end)
      first = size
      end = first + size + 1
      ret.push(temp)
    }
    return ret
  }

@mengzhe510
Copy link

mengzhe510 commented Mar 15, 2021

const _ = {
chunk: function (input, size) {
let arrs = []
if (!Array.isArray(input) || size < 1 || input.length === 0) {
return arrs
}
for (let i = 0; i < input.length; i = i + size){
arrs.push(input.slice(i, i + size))
}
return arrs
}
}

@learnRy
Copy link

learnRy commented Mar 15, 2021

function chunk(array, size) {
  if(size === 0) {
    return []
  }
  if(size >= array.length) {
    return [array.slice()]
  }
  const arr = []
  const num = array.length / size
  for(let i = 0; i < num; i++) {
    arr.push(array.slice(i*size, (i + 1)*size))
  }
  return arr
}

@monadaa
Copy link

monadaa commented Mar 15, 2021

// 第六题:实现一个 chunk 函数
/**
 * @param input
 * @param size
 * @returns {Array}
 */
// _.chunk(['a', 'b', 'c', 'd'], 2)
// => [['a', 'b'], ['c', 'd']]
// _.chunk(['a', 'b', 'c', 'd'], 3)
// => [['a', 'b', 'c'], ['d']]
// _.chunk(['a', 'b', 'c', 'd'], 5)
// => [['a', 'b', 'c', 'd']]
// _.chunk(['a', 'b', 'c', 'd'], 0)
// => []
function chunk(arr, size){
    // 首先是数组array是否合法的判断:
    let length = arr === null ? 0 : arr.length;
    if(!length) return [];
    //排除
    if(size < 1) return [];
    // 
    const result = [];
    let start = 0;
    while (start < length) {
        result.push(arr.slice(start, start + size));
        start += size;
    }
    return result;
}

@l0ng09
Copy link

l0ng09 commented Mar 15, 2021

function chunk(arr, num) {
  if (num === 0) return [];
  if (Array.isArray(arr) && typeof num === "number") {
    let result = [];
    let i = 0;
    while (i < arr.length) {
      result.push(arr.slice(i, i + num));
      i += num;
    }
    return result;
  } else {
    console.log("params type error");
  }
}

@Xchen1995
Copy link

function chunk(arr, number) {
  if (number < 0 || arr.length === 0) {
    return arr;
  }
  const total = arr.length / number;
  const newArr = [];
  for (let i = 0; i < total; i++) {
    console.log(arr.slice(i * number, (i + 1) * number))
    newArr.push(arr.slice(i * number, (i + 1) * number));
  }
  return newArr
}

@weiChow
Copy link

weiChow commented Mar 15, 2021

const chunk = (array: any[], size = 1) => {
    size = Math.max(size, 0);

    if (!array.length || size <= 0) {
      return [];
    }

    let _chunkArray: any[][] = [];
    let _chunkIndex = 0;

    while(_chunkIndex < Math.ceil(array.length / size)) {
      _chunkArray[_chunkIndex] = array.slice(_chunkIndex * size, (++_chunkIndex) * size);
    }

    return _chunkArray;
  }

@abu-ab
Copy link

abu-ab commented Mar 15, 2021

      function chunk(array, size) {
        if (size == 0) {
          return [];
        }
        let flag = -1;
        let arr = [];
        for (let i = 0; i < array.length; i++) {
          if (i % size == 0) {
            arr[++flag] = [];
          }
          arr[flag].push(array[i]);
        }
        return arr;
      }

      console.log(chunk(["a", "b", "c", "d"], 2));
      console.log(chunk(["a", "b", "c", "d"], 3));
      console.log(chunk(["a", "b", "c", "d"], 5));
      console.log(chunk(["a", "b", "c", "d"], 0));

image

@huahua5525
Copy link

function chunk (arr, size){
  if (!Array.isArray(arr) || !size) return []
  if (size >= arr.length) return arr
  let result = []
  let i = 0
  while (i < arr.length) {
    result.push(arr.slice(i, i + size));
    i += size;
  }
  return result;
}

@HydratedPig
Copy link

function chunk(arr, length) {
  if (length <= 0) return [];
  const res = arr.reduce((prev, a) => {
    const l = prev.length;
    if (l === 0 || prev[l - 1].length === length) {
      prev.push([a]);
    } else {
      prev[l - 1].push(a);
    }
    return prev;
  }, []);
  return res;
}

@AbigaiL533
Copy link

function _chunk(input, size = 1) {
  if (!Array.isArray(input)) return;
  if (input.length === 0 || size < 1) return [];
  const newLength = Math.ceil(input.length / size);
  const result = new Array(newLength);
  for (let i = 0; i < newLength; i++) {
    result[i] = input.slice(size * i, size * (i + 1));
  }
  return result;
}

@ghost
Copy link

ghost commented Mar 15, 2021

预先解释一下,chunk 函数输入两个值,第一个:待分块的数组,第二个:每块的长度。该函数将数组按照长度分块,如果剩余的元素数量不足一块,则按照一块处理。

我是百度了之后才了解这个函数的……题目中给的例子需要加一个:

_.chunk([1,2,3,4,5],2)
=>[[1,2],[3,4],[5]]

这样就完整了

看评论区都是直接上来就给答案,我确实很佩服……

@lp-lupe
Copy link

lp-lupe commented Mar 15, 2021

chunk(input,size){
      let array = []
        if (size<=0||!input){
          console.log(array)
          return array
        }else if(input.length<=size){
          array = [input]
          console.log(array)
          return array
        }else{
          for (const i of input){
           array.push(input.splice(0,size))
          }
      }
      if(input.length!=0){
        array.push(input)
      }
        console.log(array)
        return array
    }

@vandvassily
Copy link

let _ = {
    chunk: function (arr, size) {
        if (size === 0) {
            return [];
        }
        const nums = Math.ceil(arr.length / size);
        const res = [];
        for (let i = 0; i <= nums - 1; i++) {
            res.push(arr.slice(i * size, (i + 1) * size));
        }
        return res;
    }
};

/**
 * @param input
 * @param size
 * @returns {Array}
 */
console.log(_.chunk(['a', 'b', 'c', 'd'], 2));
// => [['a', 'b'], ['c', 'd']]

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

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

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

@1742284240
Copy link

1742284240 commented Mar 15, 2021

function chunk(input, size) {
  if (size == 0) {
    return [];
  }
  let newArr = [];
  let n = Math.ceil(input.length / size);
  for (let i = 0; i < n; i++) {
    newArr.push(input.slice(size * i, size * (i+1)));
  }
  return newArr;
}

Edit JavaScript学习
测试结果

console.log(chunk(["a", "b", "c", "d"], 0));
console.log(chunk(["a", "b", "c", "d"], 1));
console.log(chunk(["a", "b", "c", "d"], 2));
console.log(chunk(["a", "b", "c", "d"], 3));
console.log(chunk(["a", "b", "c", "d"], 4));
console.log(chunk(["a", "b", "c", "d"], 5));

image

@katenewbie katenewbie mentioned this issue Mar 15, 2021
Closed
@startfromscratch
Copy link

第一个参数是数组 第二参数分成几份
利用第二个参数跟第一数组的长度做一下向上取整,
循环的时候push到[]中 顺便删除掉推进去的数组但保持其原有的下标。

function chunk(arr, num){
if(num < 1 || arr.length < 1){ return []}
let nums = Math.ceil(arr.length / num)
let datas = []
for(let i = 0; i<nums; i++){
datas.push(arr.slice(num * i, num * (i + 1)))
}
return datas
}

@adam-zhou
Copy link

let myChunk = function(input, size) {
     if (!Array.isArray(input)) return;
     let result = [];
     if (size === 0) return [];
     if (size < input.length)  {
        result.push(input.slice(0, size),  input.slice(size))
     } else {
        result.push(input.slice(0, size))
     }
     return result;
}

@lucas270
Copy link

lucas270 commented Mar 15, 2021

let a=['a','b','c','d'];
function chunk(arr,num){
if(!Array.isArray(arr)){
return
}
let newArr;
let len=arr.length;
if(num===0){
newArr = []
}else if(num>=len){
newArr= [arr]
}else{
let n1=arr.slice(0,num);
let n2=arr.slice(num,len);
newArr=[n1,n2]
}
return newArr

}
console.log(chunk(a,3));

@Leexuetao
Copy link

const _ = {
chunk: function(arr, target) {
if (target === 0) {return []}
let result = []
let i = 0, len = arr.length
while(i<len) {
result.push(arr.slice(i, i+target))
i += target
}
return result
}
}

@chen870370470
Copy link

// chunk函数根据size参数将第一个array数组参数分组,剩下的如果不足则size个数也会被分成一组
// size如果为0则返回空数组
let _ = {}
_.chunk  = function (arr,size=0) {
if(!(arr instanceof Array)) return console.log('请传入一个数组!')
if(arr.length === 0) return[]
if(arr.length<= size) return arr
let result = []
while (arr.length){
    result.push(arr.splice(0,size))
}
return result
}

@panalanjun
Copy link

var _ = {
	chunk: (arr, size) =>{
		if (size === 0) {
			return [];
		}
		var filter = arr.filter((item, index) =>{
				return index < size
			});
		return size >= arr.length 
		?	[filter] 
		: 	[filter, arr.slice(size, arr.length)]
	}
}

console.log(_.chunk(['a', 'b', 'c', 'd'], 2));
console.log(_.chunk(['a', 'b', 'c', 'd'], 3));
console.log(_.chunk(['a', 'b', 'c', 'd'], 5));
console.log(_.chunk(['a', 'b', 'c', 'd'], 0));

@owlsignl
Copy link

function chunk(arr,num){
            if(!Array.isArray(arr)){
                throw new Error("请传入数组");
            }
            const len = arr.length;
            if(num <= 0){
                return []
            }
            const r1 = arr.slice(0,num)
            const r2 = arr.slice(num,len);
            return r2.length > 0 ? [r1,r2] : [r1]
        }

@ahaghosthao
Copy link

function chunk(nums, count) {
    if (Array.isArray(nums) && nums.length > 0) {
        if (count === 0) return [];

        let result = [], start = 0;
        while (nums.length > start) {
            result.push(nums.slice(start, (start += count)));
        }
        return result;
    } else {
        return false;
    }
}

@xt1995726
Copy link

function chunk(arr, size) {
  if (arr.length === 0 || size === 0) {
    return [];
  }
  let resArr = [];
  arr.forEach((item, index) => index % size === 0 ? resArr.push([item]) : resArr[resArr.length - 1].push(item));
  return resArr;
}

@cduyzh
Copy link

cduyzh commented Mar 16, 2021

splice能改变原数组利用这个特性去实现的

// 单独实现方法 一行代码
function chunk(array, num) {
  return num > 0
    ? Array.from(new Array(Math.ceil(array.length / num))).map(() =>
        array.splice(0, num)
      )
    : [];
}

chunk([1, 2, 3, 4, 5], 2);

// 符合题的示例解法
class LodashFn {
  constructor() {}
  chunk(array, num) {
    return num > 0
      ? Array.from(new Array(Math.ceil(array.length / num))).map(() =>
          array.splice(0, num)
        )
      : [];
  }
}

const _ = new LodashFn();

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

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

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

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

@liyanangrace
Copy link

liyanangrace commented Mar 16, 2021

chunk 函数接受两个参数:

  • 第一个:待分块的数组;

  • 第二个:每块的长度。
    该函数将数组按照长度分块,如果剩余的元素数量不足一块,则按照一块处理。

    我的思路 使用splice 删除每次返回的的项目数组添加进 结果数组,(splice 会改变原数组),while进行判断 只要arr具有长度,就不断将要删除的元素数组push到结果中。

      let _ = {};
      _.chunk = function (arr, size) {
        if (!Array.isArray(arr)) {
          return [];
        }
        if (size === 0) {
          return [];
        }
        let result = [];
        while (arr.length) {
          result.push(arr.splice(0, size));
        }
        return result;
      };
      console.log(_.chunk(["a", "b", "c", "d"], 2));
      console.log(_.chunk(["a", "b", "c", "d"], 3));
      console.log(_.chunk(["a", "b", "c", "d"], 5));
      console.log(_.chunk(["a", "b", "c", "d"], 0));
      console.log(_.chunk(["a", "b", "c", "d", "e"], 2));

另外 上面最后一个console 加一个测试用例
Uploading image.png…

@TMBeliever
Copy link

function _chunk(arr, size) {
  if (!Array.isArray(arr)) return
  if (!size) return []
  if (arr.length <= size) return arr
  let result = []
  let chunkArr = []
  for (let i = 0; i < arr.length; i++) {
    if (i !== 0 && !(i % size))  {
      result.push(chunkArr)
      chunkArr  = []
    }
    chunkArr.push(arr[i])
    if  (i === arr.length - 1) {
      result.push(chunkArr)
      return result
    }
  }
  return result
}

@pengpeng9413
Copy link

function fn(){
  
  // 感觉像纯考数学题,考察处理边界问题
  this.chunk=function(array,number){
    let newArray=[];
    if(number===0){
      return newArray;
    }
    array.forEach((item,index)=>{
      if(!array[index*number]) return
      newArray.push(array.slice(index*number,(index+1)*number))
    })
    console.log(newArray)
    return newArray
  }
  
}


const demoFn=new fn()
demoFn.chunk(['a', 'b', 'c', 'd'], 4)

@pengpeng9413
Copy link

chunk 函数接受两个参数:

第一个:待分块的数组;

第二个:每块的长度。
该函数将数组按照长度分块,如果剩余的元素数量不足一块,则按照一块处理。

我的思路 使用splice 删除每次返回的的项目数组添加进 结果数组,(splice 会改变原数组),while进行判断 只要arr具有长度,就不断将要删除的元素数组push到结果中。

  let _ = {};
  _.chunk = function (arr, size) {
    if (!Array.isArray(arr)) {
      return [];
    }
    if (size === 0) {
      return [];
    }
    let result = [];
    while (arr.length) {
      result.push(arr.splice(0, size));
    }
    return result;
  };
  console.log(_.chunk(["a", "b", "c", "d"], 2));
  console.log(_.chunk(["a", "b", "c", "d"], 3));
  console.log(_.chunk(["a", "b", "c", "d"], 5));
  console.log(_.chunk(["a", "b", "c", "d"], 0));
  console.log(_.chunk(["a", "b", "c", "d", "e"], 2));

另外 上面最后一个console 加一个测试用例

那你个改变原数组了

@zhangyingcai
Copy link

 const chunk = (input, size)=>{
     if(!input || !Array.isArray(input) || size<=0)
     return [];
    //  if(size > input.length) return input;
    const result = [];
    let childArr = [];
    input.forEach((item,index)=>{
        if((index + 1)%size === 1){
            childArr = []
        }
        childArr.push(item)
        if((index + 1)%size === 0 || index===input.length-1){
            result.push(childArr)
        }
    })
    
    return result
 }
 const chunk1 = (input, size)=>{
    if(!input || !Array.isArray(input) || size<=0)
    return [];
    const result = [];
    let start = 0;
    while(start<input.length){
        result.push(input.slice(start, start+size));
        start += size
    }
    console.log(result)
    return result;
 }

@huangzhuangjia
Copy link

huangzhuangjia commented Mar 16, 2021

function chunk(arr, count) {
  if (!Array.isArray(arr)) {
    console.error(`${arr} must be array`);
    return;
  }
  if (typeof count !== 'number') {
    console.error(`${count} must be number`);
    return;
  }
  if (count === 0) {
    return [];
  }
  const len = arr.length;
  const result = [];
  for(let i = 0; i < Math.ceil(len / count); i++) {
    result.push(arr.splice(0, count))
  }
  return result;
}

@zhangyingcai
Copy link

zhangyingcai commented Mar 16, 2021

不修改原数组 splice
const chunk2 = (input, size)=>{
    if(!input || !Array.isArray(input) || size<=0)
    return [];
    const result = [];
    let start = 0;
    const orginArr = [...input];
    while(orginArr.length){
        result.push(orginArr.splice(0, size));
    }
    console.log(result)
    return result;
 }

@wengsj11
Copy link

const chunk = (arr, chunkSize) => arr.reduce((pre, cur, index) => index % chunkSize === 0 ?
[...pre, [cur]] : [...pre.slice(0, pre.length - 1), [...pre[pre.length - 1], cur] ], [])

@mingyuesun
Copy link

const chunk = (array, size) => {
    if (!array || !Array.isArray(array) || size < 1) return []
    return array.reduce((prev, curr, index) => {
        if (index % size === 0) {
	    prev.push([curr])
		return prev
	}
       const temporary = prev[prev.length - 1]
       temporary && temporary.push(curr)
       return prev
    }, [])
}

@tony0511
Copy link

tony0511 commented Mar 19, 2021

const chunk = (list, ln) => {
  if (ln <= 0) return [];
  const result = [];
  list.forEach((item, index) => {
    const mol = index % ln, idx = Math.floor(index / ln);
    if (mol === 0) result[idx] = [];
    result[idx].push(item);
  });
  return result;
};

@z253573760
Copy link


function main() {
  const chunks = (input, size) => {
    size = Math.max(parseInt(size), 0);
    if (!Array.isArray(input)) {
      return [];
    }
    if (size < 1) {
      return [];
    }
    if (size > input.length) {
      return [...input];
    }
    return [input.slice(0, size), input.slice(size, input.length)];
  };
  return {
    chunks,
  };
}
const _ = main();
const res = _.chunks(["a", "b", "c", "d"], 3);
console.log(res);

@Vxee
Copy link

Vxee commented Mar 22, 2021

function chunk(arr, len) {
  if(len === 0) return [];

  let [start, end, res] = [0, len, []];
  while(start < arr.length) {
    res.push(arr.slice(start, end));
    [start, end] = [end, end+len];
  }
  return res;
}

@snqqw
Copy link

snqqw commented Mar 24, 2021

function chunk(arr, step) {
if (!Array.isArray(arr) || !step) return []
let newArr = []
let data = [...arr]
while (data.length > 0) {
newArr.push(data.splice(0, step))
}
return newArr
}

@NanYun-rs
Copy link

const _chunk = (chunker, size) => {
  let result = [];
  if (size === 0) return [];
  while (chunker.length > size) {
    const s = chunker.splice(0, size);
    result = [...result, s];
  }
  if (chunker.length < size) return [...result, chunker];
};

@wumo1016
Copy link

wumo1016 commented Apr 8, 2021

const _ = {
  chunk(list, size) {
    if(size < 1) return []
    const arr = [...list]
    const target = []
    while (arr.length){
      target.push(arr.splice(0, size))
    }
  }
}

@wy2008826
Copy link

chunk=(arr,length)=>{
    let i =0
    let arr1= []
    while(i<arr.length){
        arr1.push(arr.slice(i,i+length));
        i=i+=length
    }
    return arr1
}

@zhangqianCoding
Copy link

zhangqianCoding commented Apr 23, 2021

function chunk(array=[], size=1) {
  size = Math.max(toInteger(size),0)
  if(!Array.isArray(array)){
    return []
  }
  if(size < 1){
    return []
  }
  let begin = 0
  let len = array.length
  let arr = []
  while(begin < len){
    arr.push(array.slice(begin, begin+size))
    begin += size
  }
  return arr
}

@wenhuiyang-luck
Copy link

wenhuiyang-luck commented Apr 26, 2021

const chunk = (arr, n) => {
  let len = arr.length;
  if (len === 0 || n === 0) return [];
  let res = [];
  let g = Math.floor(len / n);
  while(g) {
    res.push(arr.splice(0, n));
    g--;
  }
  return res;
}

@dogloving
Copy link

const _ = {}
_.chunk = (arr, size) =>
    arr.reduce((prev,cur,idx)=> {
        idx%size == 0 ? prev.push([cur]) : prev[prev.length-1].push(cur)
        return prev
}, [])
console.log(_.chunk([1,2,3,4,5],2)) // [ [ 1, 2 ], [ 3, 4 ], [ 5 ] ]
console.log(_.chunk([1,2,3,4,5],4)) // [ [ 1, 2, 3, 4 ], [ 5 ] ]

@nesxiaogu
Copy link

function chunk(array = [], size = 0) {
    return size === 0 ? [] : new Array(Math.ceil(array.length / size)).fill(0).map((item, index) => {
       return array.slice(index * size, (index + 1) * size);
    });
}

@KieSun KieSun closed this as completed Sep 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests