【发布时间】:2023-02-11 02:09:56
【问题描述】:
我有一个包含数百个对象的 JSON 数组,其中每个 JSON 对象都具有 name 和 hobbies 属性。
以下是 JSON 结构:
const data = [
{
name:'Paul',
hobbies: ['Football','Reading']
},
{
name:'Riya',
hobbies: ['Singing','Dancing']
},
{
name:'Jack',
hobbies: ['Gaming']
}
]
所以在这里,如果我将遍历这些数据,它会在存在多个爱好的地方多次给我相同的名字。所以如果我是控制台,结果将是
Paul,Football
Paul,Reading
Riya,Singing
Riya,Dancing
Jack,Gaming
我不想要上面的输出我想要同一个对象中有相同名称的任何地方不要像下面这样控制它:
Paul,Football
"",Reading
Riya,Singing
"",Dancing
Jack,Gaming
下面是我的代码:
const data = [
{
name:'Paul',
hobbies: ['Football','Reading']
},
{
name:'Riya',
hobbies: ['Singing','Dancing']
},
{
name:'Jack',
hobbies: ['Gaming']
}
]
const example = (data) => {
for(var i=0;i<data.length;i++){
for(var j=0;j<data[i].hobbies.length;j++){
console.log(data[i].name,data[i].hobbies[j]);
if(i=0){
console.log(data[i].name,data[i].reports[j]);
}
else{
const prev = i-1;
if(data[prev].name == data[i].name) { //Getting TypeError here cannot read property 'name' of undefined
console.log("",data[i].reports[j]);
}
else{
console.log(data[i].name,data[i].reports[j]);
}
}
}
}
}
example(data);
在上面的代码中,我试图将数据数组中名称的先前值与名称的当前值进行比较。如果相同,则将名称字段设置为" ",否则将名称值放入位置 0 的第一个元素,我按原样放置值。
为什么我会收到这个TypeError?
【问题讨论】:
-
一个问题是在您的
if条件中,您将i设置为0。它应该是0 == i。反转比较变量末尾的条件将有助于防止将来出现此类问题。 Yoda Conditionals
标签: javascript arrays json