Zip与稀疏数组

时间:2018-03-20 13:42:42

标签: javascript ramda.js

我有两个数组,其中一个是稀疏的。我想在它们上执行基本上是外连接

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欢迎中实现此功能的任何建议。

2 个答案:

答案 0 :(得分:5)

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

更具体地说,R.zip将事物与报告的输入长度中的较小者组合在一起。两者都有长度4,因此它将返回一个四元素数组作为响应。索引3将包含[3, undefined]

当然,如果没有Ramda的话,这很容易写出来,就像@JoeWarner的回答和@dsfq的评论所示。

答案 1 :(得分:3)

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