ES5 / 6 /下一种在JavaScript

时间:2017-08-27 04:36:31

标签: javascript ecmascript-6 ecmascript-5 ecmascript-next

假设我有一个数组,我想一次迭代N.我可以使用一个简单的嵌套循环

const array = ['a','b','c','d','e','f','g','h'];
const step = 3;
for (let i = 0; i < array.length; i += step) {
   const end = Math.min(i + step, array.length);
   console.log("page:", i / step);
   for (let j = i; j < end; ++j) {
     const element = array[j];
     console.log("  ", element);
   }
}

输出:

page: 0
   a
   b
   c
page: 1
   d
   e
   f
page: 2
   g
   h

但是我想知道是否有一种更现代的方式,因为现在每天都有类似JavaScript的方式。想象:

// pseudo code
const chunkSize = 3
forEachByChunk(array, chunkSize, (subArray, chunkNdx, startingNdxInParentArray) => {
  console.log("page:", chunkNdx);
  subArray.forEach((element) => { console.log("  ", element); });
});

注意:我可以自己编写forEachByChunk

function forEachByChunk(array, chunkSize, fn) {
  const end = array.length;
  for (let i = 0; i < end; i += chunkSize) {
    fn(array.slice(i, i + chunkSize), i / chunkSize, i);
  }
}

我只是想知道在JavaScript中是否还没有一些现代方法可以做到这一点。或者更通用的版本。

3 个答案:

答案 0 :(得分:2)

  

我只是想知道在JavaScript中是否还有一些以现代方式构建的方法。

不,没有。

  

或者可能是更通用的版本。

有许多用户版本。 Google for&#34; javascript分区数组&#34;。 Here's something让你开始。

答案 1 :(得分:-1)

从lodash查看chunk。它完全符合您的要求。

一般来看看lodash和rambda。他们几乎都有你能想到的一般辅助方法。

mono --version Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-10) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug LLVM: supported, not enabled. GC: sgen 返回_.chunk([1, 2, 3, 4, 5, 6, 7, 8], 3)

编辑: 如果您正在寻找如何使用一些新语法实现这样的事情,那么就是这样做的。

[[1, 2, 3], [4, 5, 6], [7, 8]]

我希望你不要使用它。这没有经过测试,使用lodash可能会好得多。

答案 2 :(得分:-2)

使用切片和贴图可以解决问题

const step = 3;
const array = ['a','b','c','d','e','f','g','h'];
var pages = array.map( (letter,index)=> index%step===0 ? array.slice(index,index+step) : [] )
.filter((page)=>page.length>=0);