Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在JavaScript中迭代JSON数组时出错_Javascript_Arrays_Json_Node.js - Fatal编程技术网

尝试在JavaScript中迭代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文件,我使用
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); 
}