【问题标题】:Pushing elems into an array conditionally [duplicate]有条件地将元素推入数组[重复]
【发布时间】: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&lt;arr.length; i++){ if(arr[i] == newElem){ flag = true; } } if(!flag){ arr.push(newElem); } } f();
  • 感谢 pavan 指出数据流中的缺陷。

标签: javascript arrays


【解决方案1】:

首先检查元素是否存在,如下所示:

const arr = ['a', 'b'];
const newElem = 'c';
if (arr.indexOf(newElem) === -1) {
  arr.push(newElem);
}

【讨论】:

  • array.indexOf() === -1 更合适,因为您不想要匹配的值
  • 是的...很好...更新
  • 谢谢 Melas,你能显示完整的代码吗?
  • 欢迎您。这就是那里的全部内容。或者你可以用完整的代码解释你的意思
  • 谢谢 Rajesh,你是对的,我想知道他们为什么教我们这个古老的 for 循环?
猜你喜欢
  • 2021-09-30
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2018-04-22
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多