Mam oryginalną tablicę danych, która składa się z następującej struktury (Uwaga: linki to fikcyjne linki tylko na potrzeby tego przykładu) ...
var densitySet = [
{ Name: "Node 1", Total: 1000, Link: "http://www.if4it.com" },
{ Name: "Node 2", Total: 1500, Link: "http://www.if4it.com" },
{ Name: "Node 3", Total: 700, Link: "http://www.if4it.com" },
{ Name: "Node 4", Total: 300, Link: "http://www.if4it.com" },
{ Name: "Node 5", Total: 1000, Link: "http://www.if4it.com" },
{ Name: "Node 6", Total: 900, Link: "http://www.if4it.com" },
{ Name: "Node 7", Total: 1090, Link: "http://www.if4it.com" },
{ Name: "Node 8", Total: 35, Link: "http://www.if4it.com" },
{ Name: "Node 9", Total: 1000, Link: "http://www.if4it.com" },
{ Name: "Node 10", Total: 99, Link: "http://www.if4it.com" }
];
Chciałbym podzielić powyższą tablicę na dwie częścioddzielne tablice, w których pierwsza tablica (zwana „totalsArray”) składałaby się tylko ze wszystkich nazw i sum (tj. pierwsza i druga kolumna oryginalnej tablicy), a druga tablica (zwana „linksArray”) składałaby się ze wszystkich nazw i łączy (tj. pierwsza i trzecia kolumna).
Innymi słowy, po zakończeniu dwie nowe tablice będą zawierać następujące ...
var totalsArray = [
{ Name: "Node 1", Total: 1000 },
{ Name: "Node 2", Total: 1500 },
{ Name: "Node 3", Total: 700 },
{ Name: "Node 4", Total: 300 },
{ Name: "Node 5", Total: 1000 },
{ Name: "Node 6", Total: 900 },
{ Name: "Node 7", Total: 1090 },
{ Name: "Node 8", Total: 35 },
{ Name: "Node 9", Total: 1000 },
{ Name: "Node 10", Total: 99 }
];
var linksArray = [
{ Name: "Node 1", Link: "http://www.if4it.com" },
{ Name: "Node 2", Link: "http://www.if4it.com" },
{ Name: "Node 3", Link: "http://www.if4it.com" },
{ Name: "Node 4", Link: "http://www.if4it.com" },
{ Name: "Node 5", Link: "http://www.if4it.com" },
{ Name: "Node 6", Link: "http://www.if4it.com" },
{ Name: "Node 7", Link: "http://www.if4it.com" },
{ Name: "Node 8", Link: "http://www.if4it.com" },
{ Name: "Node 9", Link: "http://www.if4it.com" },
{ Name: "Node 10", Link: "http://www.if4it.com" }
];
W mojej prawdziwej sytuacji pierwotna tablica („gęstośćSet”) może być BARDZO długa, więc moje pytanie brzmi: Jaki jest najszybszy i najskuteczniejszy sposób zadeklarowania dwóch nowych tablic i przejścia przez pierwotną tablicę w celu ich zapełnienia?
Mój oryginalny kod wygląda następująco:
var totalsArray = [];
var linksArray = [];
for(var i = 0; i < densitySet.length; i++){
var tempArray1 = {Name: densitySet[i].Name, Total: densitySet[i].Total};
var tempArray2 = {Name: densitySet[i].Name, Link: densitySet[i].Link};
totalsArray.push( tempArray1 );
linksArray.push( tempArray2 );
};
Nie wiem jednak, że jest to NAJSZYBSZY i NAJWYŻSZY sposób na utworzenie dwóch nowych tablic ...
Z góry dziękuję za wszelką pomoc, którą możesz zaoferować.
Odpowiedzi:
3 dla odpowiedzi № 1Unikaj robienia tego, jeśli możesz, to jest powolne. Regularne for
pętla jest najszybsza:
var totals = [];
var links = [];
for (var i = 0; i < densitySet.length; i++) {
var obj = densitySet[i];
totals.push({
Name: obj.Name,
Total: obj.Total
});
links.push({
Name: obj.Name,
Link: obj.Link
});
}
Sprawdź to: http://jsperf.com/array-splitting-2
1 dla odpowiedzi nr 2
Utwórz dwie nowe tablice, a następnie wepchnij w nie swoje obiekty
var totalsArray = [];
var linksArray = [];
for(var i = 0; i < densitySet.length; i++){
var temp = {Name: densitySet[i].Name, Total: densitySet[i].Total};
var anotherTemp = {Name: densitySet[i].Name, Link: densitySet[i].Link};
totalsArray.push(temp);
linksArray.push(anotherTemp);
}
0 dla odpowiedzi № 3
Coś takiego?
var totalsArray = new Array();
var linksArray = new Array();
desitySet.forEach(function(elem) {
totalsArray.push(desired object here);
linksArray.push(desired object here);
}
elem
będzie każdym pojedynczym obiektem JSON w tablicy i możesz z niego tworzyć i wypychać nowe.