跳至內容

資料轉換

轉換陣列並產生新的陣列。

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中相鄰元素的陣列。如果指定的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,但適用於任何iterable。

map(iterable, mapper)

原始碼 · 傳回一個新陣列,包含iterable中已對應的值,依序,由給定的mapper函式定義。

js
d3.map(new Set([0, 2, 3, 4]), (d) => d & 1) // [0, 0, 1, 0]

類似於array.map,但適用於任何iterable。

reduce(iterable, reducer, initialValue)

原始碼 · 傳回給定reducer函式定義的簡化值,會重複呼叫iterable中的每個值,傳遞目前的簡化值和下一個值。

js
d3.reduce(new Set([0, 2, 3, 4]), (p, v) => p + v, 0) // 9

類似於array.reduce,但適用於任何iterable。