循环对象数组

时间:2019-06-14 08:01:57

标签: javascript

我必须从这个对象数组中返回Greg和Joe。

我正在遍历数组,如果主设备是Emily,我想提醒()Greg和Joe,review.name。

=IF(AND((COUNTIF($N$2:$N132,$N132)=1)+0,OR($H$2:$H132="BK",$H$2:$H132="BE")),"bk-be_unik","bk-be_duplikat")

它不会发出任何警报。

3 个答案:

答案 0 :(得分:1)

这是因为review是一个对象数组,您需要传递索引。在此演示中,传递0以获取第一个对象。您再次循环review并从每个对象获取名称

let list = [

  {
    master: "Leo",
    review: [{
        name: 'Bob',
        stars: 2
      },
      {
        name: 'Elly',
        stars: 4
      },

    ]

  },
  {
    master: "Emily",
    review: [{
        name: 'Greg',
        stars: 3
      },
      {
        name: 'Joe',
        stars: 2
      },

    ]

  },

]

for (let i = 0; i < list.length; i++) {
  if (list[i].master === 'Emily') {
    alert(list[i].review[0].name)
  }
}

答案 1 :(得分:1)

review是一个对象数组。我们可以像这样单行,但我将解释我们在做什么:

alert(
    list.find(e => e.master === "Emily").review
    .map(e => e.name).join(', ')
)

list是一个数组,它具有一个find prototype。在find方法中,我们传递了一个返回truefalse的函数。我们可以决定要查找的内容。在这种情况下,我们试图找到master属性为“ Emily”的条目。找到所需的内容后,我们可以使用map遍历条目的review属性,并返回一个数组名称,最后使用join将它们粘贴在一起。

另一种方法是使用2个循环:

for (let i = 0; i < list.length; i++) {
    if (list[i].master === 'Emily') {
        let names = [];
        for (let j = 0; j < list[i].review.length; j++) {
            names.push(list[i].review[j].name);
        }
        alert(names.join(', '));
    }
}

请记住,如果找不到master属性设置为“ Emily”的条目,则第一种方法将引发错误。

答案 2 :(得分:1)

您可以这样做:

const list = [{master: "Leo",review: [{name: 'Bob',stars: 2},{name: 'Elly',stars: 4},]},{master: "Emily",review: [{name: 'Greg',stars: 3},{name: 'Joe',stars: 2},]}]

list.forEach((o, i) => {
  if (o.master === 'Emily') {
    list[i].review.forEach(u => console.log(u.name));
  }
});