这段代码在javascript中的等价物是什么

这段代码在javascript中的等价物是什么,javascript,ruby,translate,Javascript,Ruby,Translate,我正在尝试阅读一些用ruby编写的代码。我熟悉JavaScript,并希望了解JavaScript中的代码翻译成什么 代码如下: def two_d_translate(arr) new_arr = [] arr.each do |subArray| ele = subArray[0] num = subArray[1] num.times { new_arr << ele } end return new_arr end 它将产生

我正在尝试阅读一些用ruby编写的代码。我熟悉JavaScript,并希望了解JavaScript中的代码翻译成什么

代码如下:

def two_d_translate(arr)
   new_arr = []

   arr.each do |subArray|
    ele = subArray[0]
    num = subArray[1]

    num.times { new_arr << ele }
  end

  return new_arr
end
它将产生预期的输出

[ 'boot', 'boot', 'boot', 'camp', 'camp' ]
但在这种情况下不会

arr_1=[
  ['boot', 3],
  ['camp', 0],
  ['program', 2]
]
这将导致不需要的输出,这是

[ 'boot', 'boot', 'boot', '', 'program', 'program' ]

如果您的环境允许使用扩展语法,您可以这样做

const arr_1 = [
  ['boot', 3],
  ['camp', 0],
  ['program', 2]
]

const result = arr_1.reduce((acc, [string, times]) => [...acc, ...Array(times).fill(string)], []);
console.log(result); // [ 'boot', 'boot', 'boot', 'program', 'program' ]

诀窍是使用
flatMap
将单独的运行连接在一起:

let translate=a=>a.flatMap([s,n])=>Array(n.fill(s))
console.log(翻译)([
[boot',3],
['camp',2],
[‘程序’,1]
]))
将阵列缩减为单个阵列 使用,您可以迭代整个数组,同时将最后一次计算推送/连接到最终结果中。这与相结合,允许我们创建正确数量的字符串,有时为0。我们可以很容易地将这个3D阵列转换成2D阵列。以下是一个例子:

函数translateTo2D(arr){
返回arr.reduce((结果,[名称,计数])=>
result.concat(数组(计数).fill(名称)),
[]);
}
常数arr=[[a',2],[b',0],[c',1];
控制台日志(translateTo2D(arr))@ChrisBrownie55:“ES6”指的是“…concat”这个词。
[ 'boot', 'boot', 'boot', '', 'program', 'program' ]
const arr_1 = [
  ['boot', 3],
  ['camp', 0],
  ['program', 2]
]

const result = arr_1.reduce((acc, [string, times]) => [...acc, ...Array(times).fill(string)], []);
console.log(result); // [ 'boot', 'boot', 'boot', 'program', 'program' ]