跳至内容

数据转换

转换数组并生成新的数组。

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,但适用于任何可迭代对象。