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

我正在使用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数组。使用上面的代码,我仍然无法检测到不存在的索引。

535344 次浏览

使用typeof arrayName[index] === 'undefined'

即。

if(typeof arrayName[index] === 'undefined') {
// does not exist
}
else {
// does exist
}

我不得不把techfoobar的答案包装在try..catch块,像这样:

try {
if(typeof arrayName[index] == 'undefined') {
// does not exist
}
else {
// does exist
}
}
catch (error){ /* ignore */ }

...无论如何,这就是它在chrome中的工作方式(否则,代码会因错误而停止)。

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


if (myArray.indexOf(searchTerm) === -1) {
console.log("element doesn't exist");
}
else {
console.log("element found");
}

如果使用underscore.js,则这些类型的null和undefined检查将被库隐藏。

所以你的代码是这样的

var currentData = new Array();


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


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


return true;

现在看起来可读性强多了。

如果数组的元素也是简单对象或数组,你可以使用一些函数:

// search object
var element = { item:'book', title:'javasrcipt'};


[{ item:'handbook', title:'c++'}, { item:'book', title:'javasrcipt'}].some(function(el){
if( el.item === element.item && el.title === element.title ){
return true;
}
});


[['handbook', 'c++'], ['book', 'javasrcipt']].some(function(el){
if(el[0] == element.item && el[1] == element.title){
return true;
}
});

你可以简单地使用这个:

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

考虑数组a:

var a ={'name1':1, 'name2':2}

如果你想检查'name1'是否存在于a中,只需使用in测试它:

if('name1' in a){
console.log('name1 exists in a')
}else
console.log('name1 is not in a')

在我看来,这种方法是最简单的。

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');
}
}

简单的方法来检查项目是否存在

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")
(typeof files[1] === undefined)?
this.props.upload({file: files}):
this.props.postMultipleUpload({file: files widgetIndex: 0, id})

使用typeof检查数组中的第二项是否未定义,并检查undefined

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

如果你在找这样的东西。

下面是摘录

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
}

如果我错了,请有人纠正我,但AFAIK以下是正确的:

  1. 数组实际上只是JS框架下的对象
  2. 因此,它们从Object“继承”了原型方法hasOwnProperty
  3. 在我的测试中,hasOwnProperty可以检查数组下标处是否存在任何东西。

所以,只要上述条件成立,你就可以简单地:

const arrayHasIndex = (array, index) => Array.isArray(array) && array.hasOwnProperty(index);

用法:

arrayHasIndex([1,2,3,4],4);输出:false

arrayHasIndex([1,2,3,4],2);输出:true

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

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

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

这正是in操作符的作用。像这样使用它:

if (index in currentData)
{
Ti.API.info(index + " exists: " + currentData[index]);
}

接受的答案是错误的,如果index的值是undefined,它将给出假阴性:

const currentData = ['a', undefined], index = 1;


if (index in currentData) {
console.info('exists');
}
// ...vs...
if (typeof currentData[index] !== 'undefined') {
console.info('exists');
} else {
console.info('does not exist'); // incorrect!
}

const arr = []


typeof arr[0] // "undefined"


arr[0] // undefined

If布尔表达式

typeof arr[0] !== typeof undefined

0包含在arr中是正确的吗

这也很好,使用===undefined进行类型测试。

if (array[index] === undefined){ return } // True

测试:

const fruits = ["Banana", "Orange", "Apple", "Mango"];


if (fruits["Cherry"] === undefined){
console.log("There isn't any cherry in the fruits basket :(")
}

或类似的:

const fruits = ["Banana", "Orange", "Apple", "Mango"];


if (!fruits["Cherry"]){
console.log("There isn't any cherry in the fruits basket :(")
}


// No errors:
if (fruits["Cherry"]){
console.log("There is some cherry in there!")
}

这些天,我会利用ecmascript,像这样使用它

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

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

return !!currentData[index];

输出

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


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


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