我必须从这个对象数组中返回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")
它不会发出任何警报。
答案 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
方法中,我们传递了一个返回true
或false
的函数。我们可以决定要查找的内容。在这种情况下,我们试图找到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));
}
});