使用 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]
]
我该怎么做?
为所有数组提供 .length
个 3
和 .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.times
和 R.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
。
我有一组数组,如下所示:
const difficulties = [
[true, true],
[true],
[true, true, true],
[true]
]
我想做的是使用 Ramda 对数组进行转换,以便每个子数组都填充 false
,如下所示:
[
[true, true, false],
[true, false, false],
[true, true, true],
[true, false, false]
]
我该怎么做?
为所有数组提供 .length
个 3
和 .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.times
和 R.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
。