【问题标题】:Splitting a multi-dimensional array拆分多维数组
【发布时间】:2017-10-09 00:01:16
【问题描述】:

我有一组动态创建的数组,它们存储为一个数组。

每个嵌套数组中的第一个条目始终是分类的名称,后面的项目是与该分类相关的类别。

我想使用这些数据来创建一个 URL,该 URL 反过来将在另一个页面上运行查询,就像这样;

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

如何动态拆分每个嵌套数组以创建此结构?

数组的创建方式如下:https://codepen.io/chops07876/pen/xXWVVy

更新:

我已经想出了如何相应地拆分数组,但这是最有效的方法吗?

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

【问题讨论】:

  • 你的 "like so" 例子没有任何意义
  • 抱歉,删除了那个例子。我觉得不用说就够清楚了。
  • edit您的问题以显示您的数据样本,即嵌套数组的外观。带有创建数组的代码的外部站点的链接不是很有帮助。

标签: jquery multidimensional-array


【解决方案1】:

除非处理数百万,否则您不应该担心性能。

这是一种实现方式,结合了filtermapjoin

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("&")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2021-05-04
    相关资源
    最近更新 更多