如何在javascript中检查数组索引是不是存在?
Posted
技术标签:
【中文标题】如何在javascript中检查数组索引是不是存在?【英文标题】:How to check if an array index exists or not in javascript?如何在javascript中检查数组索引是否存在? 【发布时间】:2012-10-17 22:54:28 【问题描述】:我正在使用 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
数组。使用上述代码,我仍然无法检测到不存在的索引。
【问题讨论】:
你的逻辑错了。您需要在各个条件之间使用连词 (&&
)。
【参考方案1】:
使用typeof arrayName[index] === 'undefined'
即
if(typeof arrayName[index] === 'undefined')
// does not exist
else
// does exist
【讨论】:
+1,很好。您也可以使用if(arrayName[index] === 'undefined')
作为快捷方式
@AnchovyLegend 不,你不能!但是你可以使用if(arrayName[index] === undefined)
。
如果项目存在,但它的值未定义,则此操作失败;改用这个答案-> ***.com/questions/1098040/…
正如@Matus 所说,here 有更多解释,您应该注意。
for if(arrayName[index] === undefined) 你可以使用更短的 if(!arrayName[index])【参考方案2】:
我不得不将 techfoobar 的答案包装在 try
..catch
块中,如下所示:
try
if(typeof arrayName[index] == 'undefined')
// does not exist
else
// does exist
catch (error) /* ignore */
...无论如何,这就是它在 chrome 中的工作方式(否则,代码会因错误而停止)。
【讨论】:
如果变量arrayName
本身(或 index
)不存在,这应该只有“损坏”并出现错误。简单地访问未定义的数组元素不应该导致“错误”吗?【参考方案3】:
var myArray = ["Banana", "Orange", "Apple", "Mango"];
if (myArray.indexOf(searchTerm) === -1)
console.log("element doesn't exist");
else
console.log("element found");
【讨论】:
很遗憾,这个在 IE 7 及以下版本中不起作用。 在我看来这是最好的答案,现在 IE 7 不再维护,所以这不是问题。虽然我会建议使用三等号if(myArray.indexOf(searchTerm) === -1)
OP 正在查看给定的 index 编号是否存在。这是检查给定的 value 是否存在。【参考方案4】:
如果您使用underscore.js,那么这些类型的 null 和未定义检查将被库隐藏。
所以你的代码看起来像这样 -
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'); 【参考方案5】:如果数组的元素也是简单的对象或数组,可以使用some函数:
// 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;
);
【讨论】:
some
是这里最现代的方式。它甚至还可以变成像myArray.some(el => el.item === element.item && el.title === element.title)
这样的单行符【参考方案6】:
你可以简单地使用这个:
var tmp = ['a', 'b'];
index = 3 ;
if( tmp[index])
console.log(tmp[index] + '\n');
else
console.log(' does not exist');
【讨论】:
错误。如果tmp = [0,0,0,0]
那么 tmp[3] 应该存在怎么办【参考方案7】:
考虑数组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 a" 在您的情况下不是数组对象,而是常规对象。应该是 var a = [ ... ]。我认为这是作者需要的。 这是如何检查对象中是否存在键,而不是数组中是否存在索引。in
运算符似乎也适用于数组。就像2 in [5, 6, 7, 8, 9, 10]
是真的,但6 in [5, 6, 7, 8, 9, 10]
是假的。只需将您对数组的答案更改为相关即可。【参考方案8】:
我认为这种方式是最简单的。
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');
【讨论】:
【参考方案9】:检查项目是否存在的简单方法
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")
【讨论】:
效率极低。如果我设置myArray[1000000] = 'Pear'
那么你的函数将永远持续下去。【参考方案10】:
(typeof files[1] === undefined)?
this.props.upload(file: files):
this.props.postMultipleUpload(file: files widgetIndex: 0, id)
使用typeof
检查数组中的第二项是否未定义并检查undefined
【讨论】:
【参考方案11】:var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray)
//Array index exists
else
//Array Index does not Exists
【讨论】:
你在期待什么..实际上是什么问题?【参考方案12】:如果你正在寻找这样的东西。
下面是sn-pr
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 因为这不是这个问题的目的。在Array.includes
之前,我们早就有能力检查一个值是否是一个数组,比如demoArray.indexOf(ArrayIndexValue) !== -1
。这个问题是关于检查数组中是否存在索引,这是一个完全不同的问题【参考方案13】:
如果我错了,请有人纠正我,但 AFAIK 以下是正确的:
-
数组实际上只是 JS 引擎盖下的对象
因此,他们有原型方法
hasOwnProperty
“继承”自Object
在我的测试中,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
【讨论】:
这也适用于数组中的未定义和空值,这里没有其他答案。 从 MDN 验证:“如果 Object 是 Array,hasOwnProperty 方法可以检查索引是否存在。” developer.mozilla.org/en-US/docs/Web/javascript/Reference/…【参考方案14】:var fruits = ["Banana", "Orange", "Apple", "Mango"];
if(fruits.indexOf("Banana") == -1)
console.log('item not exist')
else
console.log('item exist')
【讨论】:
【参考方案15】:当试图找出 JS 中是否存在数组索引时,最简单快捷的方法是通过双重否定。
let a = [];
a[1] = 'foo';
console.log(!!a[0]) // false
console.log(!!a[1]) // true
【讨论】:
a[1] = false
呢? 0
? ''
?【参考方案16】:
这正是in
运算符的用途。像这样使用它:
if (index in currentData)
Ti.API.info(index + " exists: " + currentData[index]);
accepted answer 是错误的,如果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!
【讨论】:
【参考方案17】:const arr = []
typeof arr[0] // "undefined"
arr[0] // undefined
如果布尔表达式
typeof arr[0] !== typeof undefined
为真则 arr 中包含 0
【讨论】:
【参考方案18】:这也可以正常工作,使用===
对undefined
进行类型测试。
if (array[index] === undefined) return // True
测试:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
if (fruits["Raspberry"] === undefined)
console.log("No Raspberry entry in fruits!")
【讨论】:
【参考方案19】:这些天我会利用 ecmascript 并像那样使用它
return myArr?.[index]
【讨论】:
@dsi 您可以随时在控制台中查看它。无论如何它应该。想法正是为了避免您在这种情况下出错。【参考方案20】:if(typeof arrayName[index] == undefined)
console.log("Doesn't exist")
else
console.log("does exist")
【讨论】:
【参考方案21】:单行验证。最简单的方法。
return !!currentData[index];
输出
var testArray = ["a","b","c"]
testArray[5]; //output => undefined
testArray[1]; //output => "b"
!!testArray[5]; //output => false
!!testArray[1]; //output => true
【讨论】:
当然没关系,但是,当一切都变得高度嵌套(难以阅读)时,您展示的方式为读者增加了额外的复杂性。即使是经验丰富的 js 编码人员,一口气读懂逻辑也很困难。testArray = [0, 0, 0]
将为每个索引生成false
,即使它们已给出。【参考方案22】:
使用 Object.hasOwn()
数组的元素被认为是自己的属性,因此您可以使用新的Object.hasOwn()
方法以简短而优雅的方式检查特定索引是否存在,如下例所示:
let cars = ['Reno', 'Ford','Honda', 'BMW'];
console.log(Object.hasOwn(cars, 3)); // true ('BMW')
console.log(Object.hasOwn(cars, 4)); // false - not defined
【讨论】:
以上是关于如何在javascript中检查数组索引是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 Javascript 中是不是存在字符串/数组/对象? [复制]