【问题标题】:Failed to console unique names from JSON array无法控制来自 JSON 数组的唯一名称
【发布时间】: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


【解决方案1】:

有几个问题,首先是错字,你分配而不是比较

if (i=0) {
// ^^^^^
  console.log(data[i].name,data[i].reports[j]);
}

剩下的就是逻辑了,你要做的就是查看j的索引

const example = data => {
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].hobbies.length; j++) {
      if (j == 0) {
        console.log(data[i].name, data[i].hobbies[j])
      } else {
        console.log("", data[i].hobbies[j])
      }
    }
  }
}

完整解决方案

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++) {
      if (j == 0) {
        console.log(data[i].name, data[i].hobbies[j])
      } else {
        console.log("", data[i].hobbies[j])
      }
    }
  }
}

example(data)

【讨论】:

  • 谢谢兄弟,这就是我所期待的。
【解决方案2】:

const data = [
 {
  name:'Paul',
  hobbies: ['Football','Reading']
 },
 {
  name:'Riya',
  hobbies: ['Singing','Dancing']
 },
 {
  name:'Jack',
  hobbies: ['Gaming']
 }
]

data.forEach(d => {
  d.hobbies.forEach((hobby, index) => {
    const name = index == 0 ? d.name : '""'
    console.log(name + ',' + hobby)
  })
})

如果 hobby 索引为 0,则只打印名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2018-10-17
    • 2012-05-16
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多