y我有一个数组在循环中接收一个新的字符串元素2秒:
//tick world
setInterval(function(){
doTradeUpdate();
},5000);
function doTradeUpdate(){
var randyManu = Math.floor(Math.random() * 10);
switch(randyManu){
case 0:
//new duro mine
countPush(manufacture,"duro-mine");
break;
case 1:
//new e-plant
countPush(manufacture,"e-plant");
break;
//etc
}
function countPush(arrayz,addable){
console.log(arrayz);
console.log("Attempting to add: " + addable);
if(arrayz.length == 0){
arrayz.push(addable);
}
else{
if (arrayz.indexOf(addable) > 0){
console.log("FOUND");
}
else{
console.log("NOT FOUND");
arrayz.push(addable);
}
}
}
如果我让这段代码运行,有时结果将显示为FOUND,有时对于相同的数组元素显示为NOT FOUND,例如:" e-plant"。因此,我最终可以得到阵列中相同的多个条目。为什么我的代码不能始终匹配元素?
这基本上就是整个脚本。没有别的东西接触阵列。
非常感谢!
答案 0 :(得分:1)
使用
if (arrayz.indexOf(addable) !== -1)
{
console.log("FOUND");
}
else
{
console.log("NOT FOUND");
arrayz.push(addable);
}
即。使用(!== -1)而不是(> 0)。
如果元素位于0,则表示未找到。
您还可以优化如下
function countPush(arrayz,addable)
{
console.log(arrayz);
console.log("Attempting to add: " + addable);
if(Array.isArray(arrayz))
{
if(arrayz.indexOf(addable) !== -1) {
console.log('Exists and found');
}
else {
arrayz.push(addable);
}
}
}
有更好的方法来检查变量是否是一个数组,我只是举个例子!
另一点,如果你在两个电话中发送相同的数组,为什么每次都要发送arrayz?也许你可以在一个共同的外部命名空间中拥有它!
答案 1 :(得分:1)
试试这个
if (arrayz.indexOf(addable) > -1)
{
console.log("FOUND");
}
else
{
console.log("NOT FOUND");
arrayz.push(addable);
}

答案 2 :(得分:1)
如果找不到该元素,则会返回-1
,因此您的检查将失败,因为您检查索引是否大于0
。
您需要检查:
(arrayz.indexOf(addable) !== -1)
答案 3 :(得分:1)
indexOf()
在找不到该元素时会返回-1
。 0
表示"我在数组的第一个位置找到了元素",这显然不是你想要的。
你应该改变
if (arrayz.indexOf(addable) > 0)
到
if (arrayz.indexOf(addable) > -1)
或者,甚至更好,合并你的ifs结束:
function countPush(arrayz,addable) {
console.log(arrayz);
console.log("Attempting to add: " + addable);
// Same as nested ifs, due to short-circuiting
if(arrayz.length === 0 || arrayz.indexOf(addable) === -1) {
console.log("NOT FOUND");
arrayz.push(addable);
} else {
console.log("FOUND");
}
}
答案 4 :(得分:0)
试试这个
{{1}}