如何在JavaScript中检查数组索引是否存在?

286

我正在使用Titanium开发,我的代码看起来像这样:

var currentData = new Array();
if(currentData[index]!==""||currentData[index]!==null||currentData[index]!=='null')
{
    Ti.API.info("is exists  " + currentData[index]);
    return true;
}
else
{   
    return false;
}

我正在向currentData数组传递一个索引。使用上述代码,我仍然无法检测到不存在的索引。


2
你的逻辑是错误的。在每个条件之间,你需要使用连接词(&&)。 - J. K.
尝试这些检查 - https://dev59.com/l1TTa4cB1Zd3GeqPu7nL#71808205 - Manohar Reddy Poreddy
20个回答

2

一行验证。最简单的方法。

return !!currentData[index];

输出

var testArray = ["a","b","c"]

testArray[5]; //output => undefined
testArray[1]; //output => "b"

!!testArray[5]; //output => false
!!testArray[1]; //output => true

1
当然可以,但是当所有内容变得高度嵌套(难以阅读)时,你所展示的方式会为读者增加额外的复杂性。即使对于有经验的JS编码人员来说,一次阅读就能理解逻辑也很困难。 - NVRM
3
testArray = [0, 0, 0] 尽管已经给定,但每个索引都会返回 false - miile7
如果你的数组包含零,这将返回不正确的结果。 - BurnsBA

2
如果你正在寻找类似的东西,这里有以下代码片段。

var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(demoArray.includes(ArrayIndexValue)){
alert("value exists");
   //Array index exists
}else{
alert("does not exist");
   //Array Index does not Exists
}


这是我今天在项目中要使用的解决方案。我不知道为什么会有负评 - 这对于我的用例来说是最好的选择,即服务器端的node.js / express。谢谢。 - mkrufky
@mkrufky,这不是这个问题的解决方法。在Array.includes之前,我们就已经有了检查值是否为数组的能力,例如demoArray.indexOf(ArrayIndexValue) !== -1。这个问题是关于检查索引是否存在于数组中,这是一个完全不同的问题。 - r3wt

1
我认为这种方式是最简单的。

var nameList = new Array('item1','item2','item3','item4');

// Using for loop to loop through each item to check if item exist.

for (var i = 0; i < nameList.length; i++) {
if (nameList[i] === 'item1') 
{   
   alert('Value exist');
}else{
   alert('Value doesn\'t exist');
}

也许另一种做法是这样的。

nameList.forEach(function(ItemList)
 {
   if(ItemList.name == 'item1')
        {
          alert('Item Exist');
        }
 }

1
简单的方法来检查是否存在项目。
Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--)
       if (this[i] == obj)
       return true;
    return false;
}

var myArray= ["Banana", "Orange", "Apple", "Mango"];

myArray.contains("Apple")

4
效率非常低。如果我设置 myArray[1000000] = 'Pear',那么你的函数将会花费很长时间。 - John Henckel

1
如果您使用 underscore.js,则这些类型的 null 和 undefined 检查将被该库隐藏。
因此,您的代码将如下所示 -
var currentData = new Array();

if (_.isEmpty(currentData)) return false;

Ti.API.info("is exists  " + currentData[index]);

return true;

现在它看起来更易读了。

即使你的答案是正确的,我也建议您再仔细考虑一下。您的代码将变得仅依赖于underscore.js来检查空值。只需编写一个简单的包装函数isset(v) { return (typeof v !== 'undefined'); }即可。 - Heroselohim

1

var fruits = ["Banana", "Orange", "Apple", "Mango"];
if(fruits.indexOf("Banana") == -1){
    console.log('item not exist')
} else {
 console.log('item exist')
}


0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

使用 typeof 检查数组中的第二个元素是否为 undefined,并检查是否存在 undefined


0

你可以简单地使用这个:

var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index]){
    console.log(tmp[index] + '\n');
}else{
    console.log(' does not exist');
}

3
错误。如果 tmp = [0,0,0,0],那么 tmp[3] 应该存在。 - John Henckel

0
if(typeof arrayName[index] == undefined) {
    console.log("Doesn't exist")
}
else {
console.log("does exist")
}

-1

在尝试查找JS数组索引是否存在时,最简单和最短的方法是通过双重否定。

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true

1
a[1] = false怎么样?0'' - AterLux
如果你的数组包含零,这将返回不正确的结果。 - BurnsBA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接