对象不可迭代 - NodeJS

3

我用下面的NodeJS程序尝试打印它们时出错,因为dataGood不可迭代。

JSON

{"name":"something,cool", "user": "Awesome,Great"}

脚本

if(fs.existsSync('./data/data.json')){
  let data =  fs.readFileSync('./data/data.json');
  let dataGood = JSON.parse(data);
  let nameGood = [];
  let userGood = [];
  for(const element of dataGood){
      let name = [] = element.name;
      let user = [] = element.user;
      let nameSplit = name.toString().split(',')
      let userSplit = user.toString().split(',');
      nameGood = nameSplit;
      userGood = userSplit;
  }
console.log(nameGood, userGood)
}

错误

TypeError: dataGood is not iterable

目标

我想从JSON中提取“name”和“user”,并将它们分别放入这两个数组中,并使用逗号将它们分开。

//After script runs
nameGood  = ['something','cool']
userGood  = ['Awesome','Great']

1
为什么你想在一个对象上进行迭代?你希望会发生什么? - Ayush Gupta
1
注意for...infor...of之间的差别。 - lastr2d2
那我该怎么办呢? - Mazino
2
那我该怎么办呢?不太清楚你想要实现什么。数据显示一个带有“name”和“user”属性的单个对象。你似乎在循环中访问了这两个属性(element.nameelement.user)。所以看起来没有任何需要迭代的东西?没有对象数组,你似乎也不想逐个迭代每个属性。那你为什么要有那个循环呢? - Felix Kling
1
所以你想要 let nameGood = dataGood.name.split(','); let userGood = dataGood.user.split(',');。不需要循环。 - Felix Kling
显示剩余3条评论
3个回答

3
for(const [key, value] of Object.entries(dataGood)){
      ...
  }

或者
for(const element of Object.keys(dataGood)){
      ...
  }

如果在你的答案中包含一个简短的解释,会使得它更好。 - Jay

0

要迭代对象,您将需要使用for...in循环。

for(const element in dataGood){
      let name = element.name;
      let user = element.user;
      nameGood.concat(name.split(','));
      userGood.concat(user.split(','));
}

谢谢,但如果名称和用户不是数组类型,我将无法使用toString()或split()函数。 - Mazino
你的 JSON 显示它们是字符串。{"name":"something,cool", "user": "Awesome,Great"} - Shihab

0

解决方案

  let data =  fs.readFileSync('./data/data.json');
  let dataGood = JSON.parse(data);
  let nameGood = [];
  let userGood = [];
   for (const [key,value] of Object.entries(dataGood)) {
       if(key == "name"){
      let name = [] = value; 
      let nameSplit = name.toString().split(',')
      nameGood = nameSplit;
    }
      if(key == "user")
      let user = [] = value;
      let userSplit = user.toString().split(',')
      userGood = userSplit;
    }
   }
console.log(nameGood, userGood)
}

感谢大家的帮助!


2
let nameGood = dataGood.name.split(','); let userGood = dataGood.user.split(','); 这样做会更简单,不需要循环。 - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接