有问题的数组拼接与for循环
Having issues with Array Splice with for loop
上面的代码只拼接了第一个元素,在for循环中第二次不工作!请帮助!
var answeredQuestions = [18,19];
var questions = [{"questionid":"18"},{"questionid":"19"},{...}];
for (var j = 0; j < questions.length; j++) {
var pos = $.inArray(parseInt(questions[j].questionid), answeredQuestions);
if(parseInt(pos) != -1) {
questions.splice(j,1);
}
}
当您在for
循环中间修改数组(从其中删除项)时,会导致您的for
循环错过数组中的项。
解决这个问题的一种方法是向后处理数组(从末尾到前面),这样当你从数组中删除当前项时,你就不会在for
循环的下一次迭代中弄乱任何索引。
var answeredQuestions = [18,19];
var questions = [{"questionid":"18"},{"questionid":"19"},{...}];
for (var j = questions.length - 1; j >= 0; j--) {
var pos = $.inArray(parseInt(questions[j].questionid, 10), answeredQuestions);
if(pos !== -1) {
questions.splice(j,1);
}
}
同样,没有必要对$.inArray
的结果使用parseInt()
,因为它已经是一个整数。
编辑作为2015/2016,它可能更容易使用.filter()
,并让该方法为您处理数组的修改:
var answeredQuestions = [18,19];
var questions = [{"questionid":"18"},{"questionid":"19"},{...}];
questions = questions.filter(function(item) {
// keep only questions that haven't been answered already
return answeredQuestions.indexOf(+item.questionid) === -1;
});
您要做的就是过滤已回答的问题。您可以使用.filter
:
var answeredQuestions = [18,19];
var questions = [{"questionid":"18"},{"questionid":"19"},{...}];
var result = questions.filter(function(e) {
return answeredQuestions.indexOf(+e.questionid) == -1;
});
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- For循环在Jquery中只运行一次
- 如何在for循环中使用计数器
- for循环中的JavaScript闭包
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- For循环在调用时未运行
- 如何使用for循环添加所有按钮'单击事件
- 如何更改在for循环中生成的圆的位置
- 为什么这个For循环会使浏览器实验室崩溃
- 为什么我使用javascript获得了一个无限的for循环
- 在for循环中使用多维数组设置google.maps.Marker图标
- 如何在angularJS中运行for循环而不使用html标记