javascript - 绕过多维数组

标签 javascript multidimensional-array coffeescript

我需要将一些数据从复杂数组获取到数组中。 例如我有这样的结构:

animals =
     /*...*/
         list: [
           {
             type: "fluffy"
             withCategories: false
             animal: [
               {
                 name: "Patrik"
                 description: "..."
                 price: 135
                 weight: 220
                 rating: 94
               }
               {
                 name: "Mike"
                 description: "..."
                 price: 135
                 weight: 235
                 rating: 97
               }
             ]
           }
           {
             imageUrl: "/img/borsh.jpg"
             type: "pets"
             withCategories: true
             categories: [
               {
                 name: "parrot"
                 imageUrl: "/img/parrot.jpg"
                 withCategories: false
                 animal: [
                   {
                     name: "Kesha"
                     description: "..."
                     price: 75
                     weight: 250
                     rating: 89
                   }
                 ]
               }
             ]
           }

因此,我需要一个包含动物元素的数组: //结果 = [object1 -> 名称:Patrik,价格:135 ..],...,[object3 -> 名称:Kesha,描述:...] 正如您在较低级别上看到的,如果参数“withCategories”= true,我们会递归地向下。 我试图实现它:

PlacesService.getAllAnimals = ->
    merged = []
    temp = (getAnimalByCategory(category) for category in animals.list)
    merged = merged.concat.apply(merged, temp)
    return merged

  getAnimalByCategory = (category) ->
    if category.withCategories == false
      return category.animal
    else
      (getAnimalByCategory(an) for an in category.categories)

但是出了点问题:(有人可以帮助我吗?我找不到任何错误。

最佳答案

您希望 getAnimalByCategory 返回一个平面列表,以便可以通过 concat 合并循环的结果。但是,在递归情况下您不会返回这样的结果。

PlacesService.getAllAnimals = ->
  [].concat.apply([], getAnimalByCategory(category) for category in animals.list)

getAnimalByCategory = (category) ->
  if not category.withCategories
    category.animal
  else
    [].concat.apply([], getAnimalByCategory(an) for an in category.categories)

关于javascript - 绕过多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28321029/

相关文章:

javascript - 在ElasticSearch上的嵌套查询

javascript - 如何正确安装 eslint-config-airbnb? `UNMET PEER DEPENDENCY`

javascript - bigint : 12000000000002539 is converted to 12000000000002540? 的 JSON 传输

嵌套数组中的PHP foreach循环

coffeescript - 无法识别构造函数中调用类函数

javascript - angularjs 服务不是函数

javascript - 使用 Meteor JS 访问 Exchange 或 Office 365 API?

java - 如何将多维数组中的元素相加?

Java - 从多个多维数组创建 JSON 对象

javascript - 如何将 JavaScript forEach 循环/函数转换为 CoffeeScript