使用 Ramda 用虚假值填充数组的剩余长度

Fill remaining length of array with falsy values using Ramda

我有一组数组,如下所示:

const difficulties = [
  [true, true],
  [true],
  [true, true, true],
  [true]
]

我想做的是使用 Ramda 对数组进行转换,以便每个子数组都填充 false,如下所示:

[
  [true, true, false],
  [true, false, false],
  [true, true, true],
  [true, false, false]
]

我该怎么做?

为所有数组提供 .length3.fill() 个额外的插槽。

for (const a of difficulties) {
  const orig = a.length;
  a.length = 3;
  a.fill(false, orig);
}

有许多不同的方法可以实现这一点。以上只是其中之一。自己尝试一些其他的方法来练习会是一个很好的练习,因为这是一个很容易的任务。

使用纯 js,您可以找到数组的最大长度并使用 fill() 填充内部数组。

const arr = [
  [true, true],
  [true],
  [true, true, true],
  [true]
]

var max = Math.max(...arr.map(e => e.length))
var result = arr.map(e => e.concat(Array(max - e.length).fill(false)))

console.log(result)

对于 Ramda,您可以使用 R.timesR.propOr:

const difficulties = [
  [true, true],
  [true],
  [true, true, true],
  [true]
];

let difficultiesFilled = R.map(e => R.times(i => R.propOr(false, i, e), 3), difficulties);
console.log(difficultiesFilled);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>

如果数组的最大长度未知,你可以这样做:

let maxLength = R.reduce(R.maxBy(R.length), [], difficulties);

并用它代替 3