【发布时间】:2019-06-01 22:52:27
【问题描述】:
我有一个简单的数组,其中包含一些元素和一个新元素,尝试使用函数检查元素,如果新元素不存在,则将其推入数组中,如果存在则忽略它。
我使用 if /else 语句创建了一个函数,但代码总是将新项目添加到数组中。
var arr=['a','b'];
var newElem='c';
function f(){
for(var i=0; i<arr.length; i++){
if(arr[i] == newElem){ console.log('Exists');return }
else {arr.push(newElem);console.log(arr); return }
}
}
f();
如果数组中不存在新项目,代码工作正常,但如果是,新元素仍被推入数组? 请问有没有人可以帮忙,不要问老师,看起来很简单?
【问题讨论】:
-
如果你有老师,而且很可能你也付钱,问他:) 不丢人
-
无法重现错误
-
@brk 问题是,OP 正在循环检查。因此,如果您尝试推送存在于第二个索引处的元素,对于第一次迭代,
(arr[i] == newElem将失败并且值将被推送到数组中 -
考虑到你的逻辑,你犯的一个小错误是你在推送之前没有遍历所有元素:
var arr=['a','b']; var newElem='c'; function f(){ var flag = false; for(var i=0; i<arr.length; i++){ if(arr[i] == newElem){ flag = true; } } if(!flag){ arr.push(newElem); } } f(); -
感谢 pavan 指出数据流中的缺陷。
标签: javascript arrays