javascript - 相当于 JavaScript 中 Ruby 的 each_cons

标签 javascript arrays ruby enumerator equivalent

很多语言都问过这个问题,但 javascript 却没有。

Ruby 有方法 Enumerable#each_cons看起来像这样:

puts (0..5).each_cons(2).to_a
# [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]]
puts (0..5).each_cons(3).to_a
# [[1, 2, 3], [2, 3, 4], [3, 4, 5]]

我怎样才能在 javascript 中为 Array 使用类似的方法?

最佳答案

这是一个函数(ES6+):

// functional approach
const eachCons = (array, num) => {
    return Array.from({ length: array.length - num + 1 },
                      (_, i) => array.slice(i, i + num))
}

// prototype overriding approach
Array.prototype.eachCons = function(num) {
  return Array.from({ length: this.length - num + 1 },
                    (_, i) => this.slice(i, i + num))
}


const array = [0,1,2,3,4,5]
const log = data => console.log(JSON.stringify(data))

log(eachCons(array, 2))
log(eachCons(array, 3))

log(array.eachCons(2))
log(array.eachCons(3))

您必须猜测结果数组的长度 (n = length - num + 1),然后您可以利用 JavaScript 的 array.slice迭代 n 次以获取所需的 block 。

关于javascript - 相当于 JavaScript 中 Ruby 的 each_cons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57477912/

相关文章:

ruby - 使用 Mechanize 查找下一个输入元素?

javascript - span 没有附加到父级 div

javascript - 隐藏损坏的图像 chrome 扩展

javascript - 在 jQuery 中从对象数组中取出一个项目

php - 数组比较、while 循环和效率

ruby - 如何在 rspec 输出中设置类的顺序?

javascript - 造型 Facebook Likebox

javascript - Svelte 商店功能更新

android - 获取日期范围内的日期数组

ruby-on-rails - 如何将 Bundler 与离线 .gem 文件一起使用?