2017-10-09 1 views
-1

J'ai un ensemble de tableaux créés dynamiquement qui sont stockés dans un tableau.Division d'un tableau multidimensionnel

La première entrée de chaque tableau imbriqué sera toujours le nom de la taxonomie, les éléments en cours étant des catégories associées à cette taxonomie.

Je voudrais utiliser ces données pour créer une URL qui à son tour va exécuter une requête sur une autre page, comme ceci;

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

Comment est-ce que je diviserais dynamiquement chaque tableau imbriqué pour créer cette structure?

Voici comment le tableau est créé: https://codepen.io/chops07876/pen/xXWVVy

MISE À JOUR:

J'ai compris comment diviser les tableaux en conséquence, est-ce la façon la plus efficace de le faire bien?

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

Votre * "comme si" * exemple ne fait pas de sens – Phil

+0

Désolé, retiré cet exemple. Je pense que c'est assez clair sans pour autant. – user1235285

+1

Veuillez [modifier] votre question pour montrer un échantillon de vos données, c'est-à-dire, à quoi ressemble le tableau imbriqué. Un lien vers un site externe avec du code qui crée le tableau n'est pas très utile. – nnnnnn

Répondre

1

À moins de traiter des millions, vous ne devriez pas vous soucier des performances.

Voici une façon de le faire, comme une combinaison de filter, map et join.

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))

est ici la même chose qu'une ES6 one-liner

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