数据转换
转换数组并生成新的数组。
cross(...iterables, reducer)
示例 · 源代码 · 返回指定 iterables 的 笛卡尔积。
js
d3.cross([1, 2], ["x", "y"]) // [[1, "x"], [1, "y"], [2, "x"], [2, "y"]]
如果指定了 reducer,它将为给定 iterables 中每个元素的组合调用,并返回相应的缩减值。
js
d3.cross([1, 2], ["x", "y"], (a, b) => a + b) // ["1x", "1y", "2x", "2y"]
merge(iterables)
示例 · 源代码 · 将指定的 iterables 可迭代对象合并到一个新的扁平数组中。此方法类似于内置的 array.concat 方法,但在您拥有数组数组或可迭代对象的可迭代对象时更方便。
js
d3.merge([[1], [2, 3]]) // [1, 2, 3]
js
d3.merge(new Set([new Set([1]), new Set([2, 3])])) // [1, 2, 3]
pairs(iterable, reducer)
示例 · 源代码 · 返回指定 iterable 中元素的相邻对的数组,按顺序排列。如果指定的可迭代对象少于两个元素,则返回空数组。
js
d3.pairs([1, 2, 3, 4]) // [[1, 2], [2, 3], [3, 4]]
如果指定了 reducer 函数,则它将依次传递 iterable 中的元素 i - 1 和元素 i。
js
d3.pairs([1, 1, 2, 3, 5], (a, b) => b - a) // [0, 1, 1, 2]
transpose(matrix)
示例 · 源代码 · 使用 zip 运算符作为二维 矩阵转置。
js
d3.transpose([["Alice", "Bob", "Carol"], [32, 13, 14]]) // [["Alice", 32], ["Bob", 13], ["Carol", 14]]
js
d3.transpose([["Alice", 32], ["Bob", 13], ["Carol", 14]]) // [["Alice", "Bob", "Carol"], [32, 13, 14]]
zip(...arrays)
示例 · 源代码 · 返回一个数组数组,其中第 i 个数组包含每个参数 arrays 中的第 i 个元素。返回的数组长度被截断为 arrays 中最短的数组。如果 arrays 只包含一个数组,则返回的数组包含一个元素数组。如果没有参数,则返回的数组为空。
js
d3.zip(["Alice", "Bob", "Carol"], [32, 13, 14]) // [["Alice", 32], ["Bob", 13], ["Carol", 14]]
filter(iterable, test)
源代码 · 返回一个新数组,该数组包含来自 iterable 的值,按顺序排列,其中给定的 test 函数返回 true。
js
d3.filter(new Set([0, 2, 3, 4]), (d) => d & 1) // [3]
类似于 array.filter,但适用于任何可迭代对象。
map(iterable, mapper)
源代码 · 返回一个新数组,该数组包含来自 iterable 的映射值,按顺序排列,如给定的 mapper 函数定义。
js
d3.map(new Set([0, 2, 3, 4]), (d) => d & 1) // [0, 0, 1, 0]
类似于 array.map,但适用于任何可迭代对象。
reduce(iterable, reducer, initialValue)
源代码 · 返回由给定的 reducer 函数定义的缩减值,该函数反复地为 iterable 中的每个值调用,并传递当前缩减值和下一个值。
js
d3.reduce(new Set([0, 2, 3, 4]), (p, v) => p + v, 0) // 9
类似于 array.reduce,但适用于任何可迭代对象。