2017-10-09 153 views
-1

我有一組動態創建的數組,它們被存儲爲一個數組。拆分多維數組

每個嵌套數組中的第一個條目將始終是分類法的名稱,並且處理項是與該分類法相關聯的類別。

我想使用這些數據來創建一個URL,然後在另一個頁面上運行查詢,就像這樣;

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

我該如何動態分割每個嵌套數組以創建此結構?

下面是如何數組創建:https://codepen.io/chops07876/pen/xXWVVy

UPDATE:

我已想出如何分裂相應的陣列,這是這樣做的,雖然最有效的方法是什麼?

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

你* 「像這樣」 *例如沒有任何意義 – Phil

+0

對不起,刪除的例子。無論如何,我認爲這很清楚。 – user1235285

+1

請編輯您的問題以顯示您的數據樣本,即嵌套數組的樣子。使用創建陣列的代碼鏈接到外部網站並不是很有幫助。 – nnnnnn

回答

1

除非處理數百萬,否則不應該擔心性能。

這裏有一種方法,作爲filter,mapjoin的組合。

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

這是同樣的事,作爲一個ES6的一行

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