2013-04-17 12 views
9

Jak mogę użyć d3.map(), aby uzyskać [10, 12] z następującej tablicy?d3.js: jak korzystać z funkcji mapy?

var mydata = [ 
    { '__data__' : 10 }, 
    {'__data__' : 12 } 
]; 

Próbowałam, ale to nie działa:

var mymap = d3.map(mydata, function(d) { 
    return d.__data__; 
}); 

Odpowiedz

8

Nie można - d3.map() nie jest do mapowania funkcji całej tablicy, ale podkładka dla mieszań . Krótko mówiąc, podczas gdy obiekty mogą być używane jak skróty, zdarzają się sytuacje, w których może wystąpić nieoczekiwane zachowanie. Nowy standard JavaScript proponuje rozwiązanie tego problemu, a do czasu jego wdrożenia można użyć tego samego efektu w postaci d3.map().

Więcej informacji pod numerem the documentation.

+0

jakiejkolwiek porady, jak się dostać [10,12] jak na jego przykład? – helixmat

+3

Możesz po prostu zrobić 'mydata.map (function (d) {return d .__ data;})'. –

3

.map() po prostu tworzy kolejną tablicę, przechodząc przez coś, co mu dałeś i wykonując funkcję zdefiniowaną dla każdego elementu w starej tablicy, a następnie staje się nową tablicą.

więc gdybym chciał wykonać jedną operację na wszystkich elementów w tablicy i zrobić nową tablicę z niego, chciałbym użyć .map()

na przykład, muszę zobaczyć coś reprezentowane procenty, gdy dane, które otrzymuję z/proc/loadavg, dają mi liczby takie jak 0.28, 0.03, 1.0, 0.97, 0.04 itd. dla każdego 5-15 min obciążenia średniego. ale potrzebuję też wyjścia z uruchamiania nproc w moich obliczeniach, a nproc daje mi ile rdzeni, które są dystrybuowane. więc utworzyć tablicę za każdym razem/proc/loadavg daje mi nową wartość, a ja wcisnąć każdą nową wartość na tablicy ...

Byłoby to twoje początkowe dane:

var data = [0.28,0.03,1.0,0.97,0.04]; 
var dataSize = 5; 

To może być funkcja używać zastosowanie do wszystkich indeksów w swojej oryginalnej tablicy danych:

percent = function() { 
     return (loadval/(numCores*100)); 
    } 

To byłoby przyporządkowując je do nowej tablicy z przekształconych wartości:

data = d3.range(dataSize).map(percent);