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

标签 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

代码的目的是通过将字符串打印与其旁边的数字(每个子数组中的第二个元素)一样多的次数,将二维数组转换为一维数组。

我用它来尝试模仿它,但我想知道是否还有其他更好的东西。

function two_d_translate(arr) {
  let newArr = '';
  let array = [];

  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].length; j += 2) {
      let ele = arr[i][j];
      let num = arr[i][j+1];

      if (num === 0){
       continue;
      }

      array[i] = Array(num).fill(ele);
    }
  }

  newArr = array.toString().split(',');
  return newArr;
}

这对于这个测试样本来说似乎很酷。

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

console.log(two_d_translate(arr_1));

它将产生预期的输出

[ 'boot', 'boot', 'boot', 'camp', 'camp' ]

但在这种情况下不会

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

这会导致不希望的输出,即

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

最佳答案

将数组缩减为一个

Array#reduce您可以遍历整个数组,同时将最后的计算推送/连接到最终结果中。这个,结合Array.fill , 允许我们创建正确数量的字符串,有时为 0。和 Array#concat我们可以轻松地将这个 3D 数组转换为 2D 数组。这是一个例子:

function translateTo2D(arr) {
  return arr.reduce((result, [name, count]) =>
    result.concat(Array(count).fill(name)),
  []);
}

const arr = [['a', 2], ['b', 0], ['c', 1]];
console.log(translateTo2D(arr));

关于javascript - 这段代码在 javascript 中的等价物是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310003/

相关文章:

python - PyPy 翻译 64 位

c - C Endian是中立的吗?

javascript - 检查文件格式是否与 Python、Javascript 中的文件扩展名不同?

javascript - 来自 webapp 的 Facebook 分享对话框深度链接

ruby - 指定 Rubygems 的自定义位置以通过包类型安装

ruby-on-rails - 查找与 current_user 在同一组中的用户关联的所有记录

ruby - 将散列添加到每个 double 组中

javascript - 我无法获取数组 json 响应

javascript - 我试图打印数组索引,但是我们如何在 angularjs 中以相反的顺序进行打印

css - 如何在同一元素上使用 translate3d 和比例尺?