zoukankan      html  css  js  c++  java
  • [Algorithm] Chunk Array

    // --- Directions
    // Given an array and chunk size, divide the array into many subarrays
    // where each subarray is of length size
    // --- Examples
    // chunk([1, 2, 3, 4], 2) --> [[ 1, 2], [3, 4]]
    // chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5]]
    // chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) --> [[ 1, 2, 3], [4, 5, 6], [7, 8]]
    // chunk([1, 2, 3, 4, 5], 4) --> [[ 1, 2, 3, 4], [5]]
    // chunk([1, 2, 3, 4, 5], 10) --> [[ 1, 2, 3, 4, 5]]

    function chunk(array, size) {
      let result = [];
      let temp = [];
      const len = array.length;
      for (let i = 0; i < len; i++) {
        let mod = i % size;
        if (mod === 0) {
          if (temp.length !== 0) {
            result = [...result, temp];
          }
          temp = [];
        }
    
        temp[mod] = array[i];
      }
    
      result = [...result, temp];
    
      return result;
    }

    way 2:

    function chunk(array, size) {
      let chunked = [];
      let index = 0;
    
      while (index < array.length) {
        chunked.push(array.slice(index, index + size));
        index += size;
      }
    
      return chunked;
    }

    test:

    const chunk = require("./index");
    
    test("function chunk exists", () => {
      expect(typeof chunk).toEqual("function");
    });
    
    test("chunk divides an array of 10 elements with chunk size 2", () => {
      const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
      const chunked = chunk(arr, 2);
    
      expect(chunked).toEqual([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]);
    });
    
    test("chunk divides an array of 3 elements with chunk size 1", () => {
      const arr = [1, 2, 3];
      const chunked = chunk(arr, 1);
    
      expect(chunked).toEqual([[1], [2], [3]]);
    });
    
    test("chunk divides an array of 5 elements with chunk size 3", () => {
      const arr = [1, 2, 3, 4, 5];
      const chunked = chunk(arr, 3);
    
      expect(chunked).toEqual([[1, 2, 3], [4, 5]]);
    });
    
    test("chunk divides an array of 13 elements with chunk size 5", () => {
      const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
      const chunked = chunk(arr, 5);
    
      expect(chunked).toEqual([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13]]);
    });
  • 相关阅读:
    .Net4.0 任务(Task)[转]
    在 Asp.NET MVC 中使用 SignalR 实现推送功能 [转]
    Quartz.net官方开发指南[转]
    配置Windows server 2008文件同步[转]
    Web 前端性能优化相关内容解析[转]
    标头“Vary:Accept-Encoding”指定方法[转]
    linux服务器的Gzip文件压缩方法[转]
    Windows下面安装和配置Solr 4.9(三)支持中文分词器
    Windows下面安装和配置MySQL(5.6.20)
    Windows下面安装和配置Solr 4.9(二)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10960776.html
Copyright © 2011-2022 走看看