【问题标题】:Loop Object inside array inside object inside array JavaScript循环对象内的数组内的对象内的数组JavaScript
【发布时间】:2017-10-11 15:26:10
【问题描述】:

我试图在数组内的对象内循环对象内的数组,我真的很困惑!

这是我的任务:

var arr = [
{
title: "Harry Potter",
categories: [
{
id: 39,
name: "Popular Books"
},
{
id: 3,
name: "Kids"
},
{
id: 79,
name: "All Books"
}
]
},


{
title: "Pride and Prejudice",
categories: [
{
id: 36,
name: "Classic Books"
},
{
id: 3,
name: "Woman"
},
{
id: 79,
name: "All Books"
}
]
}
]

如何获得只有“儿童”类别名称的书名?

现在我能想到的只有:

var find = function(arr){
  for(var i=0; i<arr.length; i++){
    for(var j=0; j<arr[i].categories; j++){
      console.log(arr[i].categories[j].name)
    }
  }
}

这是超级肮脏的,无论如何都不起作用。 谢谢!

【问题讨论】:

标签: javascript arrays loops ecmascript-6


【解决方案1】:

您可以使用过滤器过滤那些类别与“儿童”匹配的数组元素,然后将它们的标题映射到一个新数组中。

arr.filter( i => i.categories.some(j => j.name ==="Kids") ).map(k => k.title )

var arr = [{
    title: "Harry Potter",
    categories: [{
        id: 39,
        name: "Popular Books"
      },
      {
        id: 3,
        name: "Kids"
      },
      {
        id: 79,
        name: "All Books"
      }
    ]
  },


  {
    title: "Pride and Prejudice",
    categories: [{
        id: 36,
        name: "Classic Books"
      },
      {
        id: 3,
        name: "Woman"
      },
      {
        id: 79,
        name: "All Books"
      }
    ]
  }
];

console.log(arr.filter(i => i.categories.some(j => j.name === "Kids")).map(k => k.title));

【讨论】:

  • 你的和我的一模一样。没有看到这个答案。
  • 只是一个指针,您正在使用 3 个循环。 .filter.some 然后是.map。您可以使用.reduce + .some 减少迭代次数
  • 如果它对您有帮助,请考虑接受它作为答案。
  • 绝对有帮助,我接受了答案(甚至不知道我能做到))
  • 嗨@dev8080:我的要求与这个问题几乎相同。我也尝试了您的答案,但没有得到确切的输出。你能帮我么? jsfiddle.net/jasie/4jhd7zrs/10
【解决方案2】:

试一试:

var find = function(arr, name) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr[i].categories.length; j++) {
            if (arr[i].categories[j].name === name) {
                return arr[i].categories[j];
            }
        }
    }
}

find(arr, 'Kids')

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 1970-01-01
    • 2022-12-17
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多