2017-10-09 117 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("&")