尝试在JavaScript中迭代JSON数组时出错
我有一个JSON文件,我使用尝试在JavaScript中迭代JSON数组时出错,javascript,arrays,json,node.js,Javascript,Arrays,Json,Node.js,我有一个JSON文件,我使用JSON.parse()将其加载到js代码中,没有任何问题(这里显示的是一个简化的文件示例,长度25个项目) 当我每次迭代访问一个项目时,我没有问题,但是当我尝试增加索引以访问每次迭代的项目时,它抛出以下错误(代码中的注释显示了有问题的行): log(searchTerms[j].Term) TypeError:无法读取未定义的属性“Term” var data=fs.readFileSync(searchTermsFile); var searchTerms=JSO
JSON.parse()
将其加载到js代码中,没有任何问题(这里显示的是一个简化的文件示例,长度25个项目)
当我每次迭代访问一个项目时,我没有问题,但是当我尝试增加索引以访问每次迭代的项目时,它抛出以下错误(代码中的注释显示了有问题的行):
log(searchTerms[j].Term)
TypeError:无法读取未定义的属性“Term”
var data=fs.readFileSync(searchTermsFile);
var searchTerms=JSON.parse(数据);
searchTerms=searchTerms.List;
对于(var j=0;j您可以使用默认对象,它解决了错误,但也返回undefined
j += 1;
console.log((searchTerms[j] || {}).Term);
处理超出范围的索引的另一种方法是提前使用检查,并防止使用大于上一个索引值的索引
if (j < searchTerms.length) {
// process item
console.log(searchTerms[j].Term);
}
if(j
这是因为您正在递增j
然后进行检查,但是,由于您正在迭代到长度-1
之后,它将在j+=1
之后超出范围,请尝试
var data = fs.readFileSync(searchTermsFile);
var searchTerms = JSON.parse(data);
searchTerms = searchTerms.List;for(var j=0;j<searchTerms.length - 1;j++)
{
console.log(searchTerms[j].Term);
j+=1;
console.log(searchTerms[j].Term);
}
var data=fs.readFileSync(searchTermsFile);
var searchTerms=JSON.parse(数据);
searchTerms=searchTerms.List;for(var j=0;j您的对象包含4个Term
,而您的for
循环计数为4,但是j+=1
在上一次迭代中使j=5
并且searchTerms[5]
中没有对象。这就是您的代码无法工作的原因。
我编写了示例程序。希望这对您有所帮助:
var数据={
“名单”:[
{“期限”:“1”},
{“期限”:“2”},
{“期限”:“3”},
{“期限”:“4”},
{“期限”:“5”},
{“期限”:“6”},
{“期限”:“7”},
{“期限”:“8”},
{“任期”:“9”},
{“任期”:“10”},
{“任期”:“11”},
{“期限”:“12”}
]
};
功能测试(){
var searchTerms=data.List;
var j=0;
var currentFiveObject=[];
对于(j=0;j
您可以试试这个
var data = fs.readFileSync(searchTermsFile);
var searchTerms = JSON.parse(data);
var i = 0;
searchTerms = searchTerms.List;for(var j=0;j<searchTerms.length;j++)
{
i = j
console.log((searchTerms[i] || {}).Term);
i +=1;
console.log((searchTerms[i] || {}).Term);
}
var data=fs.readFileSync(searchTermsFile);
var searchTerms=JSON.parse(数据);
var i=0;
搜索术语=搜索术语.Listar;(var var j=0;j)你面临的实际问题是你的J-索引需要一个不包含在JSON对象中的项目。我发现你的循环没有理由在记录你的术语的中间增加索引变量。
如果该索引增量是预期的,那么在使用它作为索引访问器之前,需要考虑j值是否等于或大于搜索项长度。< /P>
删除它或处理它。你不能等待下一个循环吗?或者你需要在循环内部访问下一个项目吗?我每次迭代需要访问5个项目你不需要j+=1;
因为你已经有一个for循环。在本例中,当你阅读3时,它将转到4并尝试访问searchTerms[4]
哪一个没有exist@danielgoba84告诉我们要求这是一个简化的代码,我每次迭代需要访问5个项目,我使用它们创建一个请求,我还将连接它们以创建一个唯一的文件名OK我会编辑代码,但这不是问题,我简化了JSON,以节省空间,它有25个项目长,而且代码简化后,(将编辑)'j+=5',在循环内,我更新'j',当'j'增加并尝试访问下一个元素时,即使在第一次迭代中,它也会抛出error@danielgoba84我为您的案例添加了示例代码。请测试您不理解这应该如何工作,您能解释一下吗?
var data = fs.readFileSync(searchTermsFile);
var searchTerms = JSON.parse(data);
searchTerms = searchTerms.List;for(var j=0;j<searchTerms.length - 1;j++)
{
console.log(searchTerms[j].Term);
j+=1;
console.log(searchTerms[j].Term);
}
var data = fs.readFileSync(searchTermsFile);
var searchTerms = JSON.parse(data);
var i = 0;
searchTerms = searchTerms.List;for(var j=0;j<searchTerms.length;j++)
{
i = j
console.log((searchTerms[i] || {}).Term);
i +=1;
console.log((searchTerms[i] || {}).Term);
}