带稀疏数组的 Zip

Zip with sparse array

我有两个数组,其中一个是稀疏数组。我想对它们执行本质上是 outer join 的操作。

const a = ['a', 'b']
a[3] = 'c'
// a is Array(4) [ "a", "b", <1 empty slot>, "c" ]

R.zipSparse([1, 2, 3, 4], a)
// expected output: [[1, 'a'], [2, 'b'], [3, undefined], [4, 'c']]

欢迎就如何在 Ramda 中或简单地实现此功能提出任何建议Javascript。

function zipSparse(arr, join) {
  return arr.map((i, index) => [i, join[index]])
}

为了解释这里发生了什么,我们使用 map 迭代器并遍历 arr 中的每个项目,然后在第二个数组的索引处连接相同的项目 join

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

这实际上是R.zip的行为。

更具体地说,R.zip 组合了报告的输入长度中的较小者。它们的长度都是 4,因此它将 return 一个 four-element 数组作为响应。索引 3 将包含 [3, undefined].

当然,如果没有 Ramda,这很容易自己写,正如@JoeWarner 的回答和@dsfq 的评论所示。