2017-10-09 3 views
-1

Ich habe eine Reihe von dynamisch erstellten Arrays, die als ein Array gespeichert sind.Aufteilen eines mehrdimensionalen Arrays

Der erste Eintrag in jedem verschachtelten Array ist immer der Name der Taxonomie, wobei die fortlaufenden Elemente Kategorien sind, die dieser Taxonomie zugeordnet sind.

Ich möchte diese Daten verwenden, um eine URL zu erstellen, die wiederum eine Abfrage auf einer anderen Seite ausführen wird, so;

http://example.com/?stoma=colostomy&problem=leaks,odour 

Wie würde ich jedes verschachtelte Array dynamisch teilen, um diese Struktur zu erstellen?

Hier ist, wie das Array erstellt: https://codepen.io/chops07876/pen/xXWVVy

UPDATE:

Ich habe herausgefunden, wie die Arrays entsprechend aufzuteilen, ist dies der effizienteste Weg, obwohl das tun?

query = ''; 

$(result).each(function(i){ 
    if(result[i].length >= 2) { 
     taxonomy = result[i][0]; 
     categories = result[i].slice(1); 
     query += taxonomy+'='+categories+'&'; 
    } 
}); 

console.log(query.slice(0,-1)); 
+0

Ihre * "wie so" * Beispiel macht keinen Sinn – Phil

+0

Sorry, dieses Beispiel entfernt. Ich denke, es ist ohne weiteres klar genug. – user1235285

+1

Bitte bearbeiten Sie Ihre Frage, um ein Beispiel Ihrer Daten anzuzeigen, d. H. Wie das verschachtelte Array aussieht. Ein Link zu einer externen Site mit Code, der das Array erstellt, ist nicht sehr hilfreich. – nnnnnn

Antwort

1

Wenn Sie nicht mit Millionen umgehen, sollten Sie sich keine Gedanken über die Leistung machen.

Hier ist eine Möglichkeit, es als eine Kombination von filter, map und join zu tun.

var arrays = [[], ["stoma", "colostomy"], ["problem", "leaks", "odour"]]; 
 

 
function stringify(arrays){ 
 
    
 
    // Remove all elements of length < 2. 
 
    var filtered = arrays.filter(function(array){ 
 
    return array.length > 1; 
 
    }); 
 

 
    // Convert every array into a string (tax=cat1,cat2...) 
 
    var strings = filtered.map(function(array){ 
 
    var taxonomy = array[0]; 
 
    var categories = array.slice(1); 
 
    return taxonomy + "=" + categories.join(",") 
 
    }); 
 
    
 
    // Join all previous strings with `&` and add a `?` on beginning. 
 
    return "?" + strings.join("&"); 
 
    
 
} 
 

 
console.log(stringify(arrays))

Hier ist das gleiche wie ein ES6 Einzeiler

(arrays) => "?" + arrays.filter(({length}) => length > 1).map(([tax, ...cats]) => `${tax}=${cats.join(",")}`).join("&") 
Verwandte Themen