You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何正确遍历由C#对象序列化得到的二维JSON数据?

正确遍历嵌套二维JSON数组的方法

嘿,我来帮你搞定这个遍历问题~首先先明确你的数据结构:这是一个外层数组嵌套内层数组的结构,每个内层数组里是包含IDNameCtTime属性的对象,是从C#序列化过来的标准JSON数组。

你原来用for...in的方式其实能跑,但并不适合遍历数组——因为for...in是用来遍历对象的可枚举属性的,虽然数组也是对象,但它会把数组原型链上的额外属性(比如如果有人给Array.prototype加了自定义方法)也遍历出来,而且遍历顺序也不能保证和数组元素顺序一致,所以更推荐用专门针对数组的遍历方式:

1. 最传统的普通for循环(兼容性最好)

这种方式通过索引遍历,适合需要控制遍历过程(比如中断、跳过)的场景:

// 假设data已经是解析后的JavaScript数组(比如用JSON.parse处理过)
for (let i = 0; i < data.length; i++) {
  const innerArray = data[i];
  // 遍历内层数组
  for (let j = 0; j < innerArray.length; j++) {
    const currentItem = innerArray[j];
    // 访问对象属性,做你需要的操作
    console.log(`ID: ${currentItem.ID}, 时间: ${currentItem.Time}`);
  }
}

2. 更简洁的forEach方法(ES5+支持)

如果不需要中断遍历,forEach写法更清爽,可读性更高:

data.forEach(innerArr => {
  innerArr.forEach(item => {
    // 处理每个对象
    console.log(`名称: ${item.Name}, 计数: ${item.Ct}`);
  });
});

3. ES6+的for...of循环(最直观)

for...of专门用来遍历可迭代对象(包括数组),直接拿到数组元素,不用管索引:

for (const innerArr of data) {
  for (const item of innerArr) {
    // 操作当前对象
    console.log(`ID: ${item.ID}, 时间: ${item.Time}`);
  }
}

为什么不推荐用for...in?

举个例子,如果有人给数组原型加了一个自定义方法:

Array.prototype.myCustomMethod = function() {};

那你用for (var key in data)的时候,key会包含"myCustomMethod",导致你遍历到非数组元素的内容,出现错误。而上面三种方法只会遍历数组本身的元素,更安全可靠。

只要你的JSON已经被正确解析成JavaScript数组(比如通过JSON.parse()),以上三种方式都能完美遍历你的数据~

内容的提问来源于stack exchange,提问作者The Moon

火山引擎 最新活动