[英]Pushing to array if value contains
Here is the code I have written 这是我写的代码
function arrayContains(value,array){
var result = false;
for(i=0;i<array.length;i++){
if(array[i]==value){
result = true;
}
}
return result;
}
function someFunction(array2){
var arr = [];
for(i = 0 ; i<array2.length; i++){
var val = array2[i];
if(!arrayContains(val,arr)){
arr.push(val);
}
}
console.log(arr);
}
But, running this code, freezes the browser. 但是,运行此代码会冻结浏览器。 What's wrong with this code? 此代码有什么问题?
You forgot var
twice : 您两次忘记了var
:
for(i=0;i<array.length;i++){
...
for(i = 0 ; i<array2.length; i++){
So all your loops use the same, global, variable i
. 因此,所有循环都使用相同的全局变量i
。 When you call arrayContains
, you reset the counter used in someFunction
which leads to that infinite loop. 当您调用arrayContains
,您将重置someFunction
中使用的计数器,这会导致无限循环。
Be careful to add the var
declaration in all your loops : 注意在所有循环中添加var
声明:
for(var i=0; i<array.length; i++){
Side note : you don't have to iterate over the whole array in arrayContains
, you can do 旁注:您不必遍历arrayContains
的整个数组,您可以执行
function arrayContains(value, array){
for(var i=0; i<array.length; i++){
if(array[i]==value) return true;
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.