D3js中的forEach
和each
有什麼不同?D3 javascript每行之間的區別
71
A
回答
149
首先,.forEach()
不是d3的一部分,它是javascript數組的本地函數。所以,
["a", "b", "c"].forEach(function(d, i) { console.log(d + " " + i); });
// Outputs:
a 0
b 1
c 2
即使d3沒有加載在頁面上,這工作。
接下來,d3的.each()
適用於d3選擇(當您獲得d3.selectAll(...)
時可獲得的結果)。從技術上講,您可以在d3選擇上致電.forEach()
,因爲在幕後,d3選擇是具有額外功能的陣列(其中一個是.each()
)。但你不應這樣做,因爲:
這樣做不會產生所需的行爲。知道如何使用帶有d3選擇的
.forEach()
以產生任何期望的行爲,需要深入理解d3的內部工作原理。那麼爲什麼呢,如果你只能使用API的公開部分。當您在D3選擇呼叫
.each(function(d, i) { })
,您得到的不僅僅是d
和i
更多:函數被調用使得this
關鍵字的功能點與d
相關的HTML DOM元素內的任意位置。換言之,來自function(d,i) {}
內部的console.log(this)
將記錄類似<div class="foo"></div>
或其他任何html元素。這很有用,因爲那麼你可以調用這個this
對象的函數來改變它的CSS屬性,內容或其他。通常,您可以使用d3來設置這些屬性,如d3.select(this).style('color', '#c33');
。
主要外賣的是,使用.each()
您可以訪問你需要3樣東西:d
,this
和i
。與.forEach()
一樣,在一個數組上(比如從頭開始的例子),你只能得到2件東西(d
和i
),而且你還得做一堆工作來將HTML元素與這兩件事聯繫起來。除此之外,這是d3如何有用。
相關問題
- 1. $ .each和每個()之間的區別()
- 2. javascript中的/ * * /和//之間的區別
- 3. JavaScript數組之間的區別
- 4. Javascript + HTML - 「'和」之間的區別「
- 5. Javascript ES6。 ===和Object.is之間的區別
- 6. window []和eval()之間的區別 - Javascript
- 7. Javascript包裝方法之間的區別
- 8. javascript .childNodes和.children之間的區別
- 9. css/javascript選擇器之間的區別
- 10. ECMAScript6和JavaScript之間的區別
- 11. JavaScript中[] [[]]和[[]] []之間的區別?
- 12. Javascript「Math.sin」和WebGL「sin」之間的區別
- 13. Javascript - 函數聲明之間的區別
- 14. javascript構造函數之間的區別
- 15. JavaScript函數聲明之間的區別?
- 16. 對象之間的區別(javascript和jquery)
- 17. 行匹配和行之間的區別
- 18. KDB/Q中的行之間的區別
- 19. d3:排序和升序之間的區別
- 20. 並行流與CompletableFuture之間的區別
- 21. TestNG和JUnit執行之間的區別
- 22. Mysql中連續行之間的區別
- 23. 行建模與EAV之間的區別
- 24. 之間的〜/和的區別../
- 25. CMake的:$ {}之間的區別 「$ {}」
- 26. 插入到每行或每個表只有一個之間的區別
- 27. '#','%'和'$'之間的區別
- 28. {!!之間的區別!!}和{{}}
- 29. 加入之間的區別
- 30. '+ ='和'= +'之間的區別?
非常有幫助的解釋,謝謝! –
謝謝你寫了一個很好的答案,併爲此做,而不包括任何在SO上如此常見的不必要的snark ... –
這裏應該有一個警告:當你確實需要'this'關鍵字的不同範圍,但你不' t在你的調用函數中需要數據,selection [0] .forEach(...)比selection.each方便得多,如果'this'在僅僅引用之外是有意義的,這就需要在父函數中使用'self = this'解決方法DOM元素。 – sdupton