我正在尝试将用户输入添加到数组中,如果用户输入重复值,则会引发错误警报。下面的方法对于重复项工作正常,但对于非重复值也会引发错误。我不明白为什么。它可能很简单,但我看不到。
addDIN(val) {
var arr = this.din_require_list;
if (arr.length == 0) {
arr.push(val)
}
else if (arr.length > 0) {
for (var i= 0; i < arr.length; i++) {
if (val != arr[i]) {
arr.push(val);
}
else if(val == arr[i]){
alert("duplicate entry");
arr.splice(i+1,1);
}
};
};
}
答案 0 :(得分:0)
使其更简单
function insertUnique(val){
var arr = [];
if(!arr.includes(val)){
arr.push(val)
}else{
alert("Duplicate entry");
}
}
Array.include检查该值在给定数组中是否存在。
请参阅此https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
答案 1 :(得分:0)
您将推入数组但没有退出循环,因此循环将继续运行并匹配该值并引发错误,
您应该做的是分别运行for循环,并保留一个标志(如果该标志是否重复),并且如果找不到重复项,则将该元素添加到数组中
喜欢
for (var i= 0; i < arr.length; i++) {
if(arr[i]== val){
dupeFound==1;
console.log("duplicate")
break;
}
}
if(dupeFound!=1) array.push(val)
答案 2 :(得分:0)
at risk of being simplistic
why not?
var arr = [1,2,'c','dude what'];
var lookfor = 'dude';
if(arr.indexOf(lookfor) != -1){
console.log('dude string already exists on the array')
}
Therefore
var arr = [1,2,'c','dude what'];
var add = 1;
if((arr.indexOf(add) == -1)?arr.push(add): false){
console.log('added ',add);
}else{
console.log(add,'already in array');
}
console.log(arr);