我正在尝试比较两个数组并返回一个新数组,其中只有在两个给定数组之一中找到的任何项目。
e.g。比较[1,2,3,4]
和[1,2,3]
的结果应为:[4]
。
问题是,我在循环执行后得到'undefined'
元素。
function diff(arr1, arr2){
var newArr = [];
for(i=arr1[0]; i<=arr1.length; i++){
if(arr2.indexOf(arr1[i])=== -1){
newArr.push(arr1[i]);
}
}
console.log(newArr);
};
diff([1,2,3,4], [1,2,3]);
结果是[4, undefined]
。我做错了什么?
答案 0 :(得分:1)
您的for
循环定义不正确。它应该从i=0
开始,一直运行到i<arr1.length
function diff(arr1, arr2){
var newArr = [];
for(i=0; i<arr1.length; i++){
if(arr2.indexOf(arr1[i])=== -1){
newArr.push(arr1[i]);
}
}
console.log(newArr);
};
通过运行直到i<=arr1.length
,您尝试迭代一次以上,导致在结果数组中添加最终的未定义值。正如Mario Garcia在评论中所说,在最后一次迭代中,循环将尝试访问不存在的arr[4]
,因此未定义。
答案 1 :(得分:0)
你的循环是错误的,因为你的迭代器不是从0开始(以匹配第一个数组元素),而是从索引零处的数组值开始(在你的情况下是数字1,但可能是几乎任何东西);然后当迭代器达到数组的长度时你会超出索引范围,在你的情况下它是4,而 arr1 [4]是未定义的。
在修复循环起始值和条件后,我们得到:
function diff(arr1, arr2){
var newArr = [];
for(i = 0; i < arr1.length; i++){
if(arr2.indexOf(arr1[i])=== -1){
newArr.push(arr1[i]);
}
}
alert(newArr);
};
diff([1,2,3,4], [1,2,3]); // 4
diff([1,2,3,4,5], [1,3]); // 2, 4, 5
&#13;