我有这样一个数组:
arr['key1'] = true;
arr['key2'] = true;
arr['key3'] = true;
...
arr['keyN'] = true;
Run Code Online (Sandbox Code Playgroud)
如何确定,有没有人键入"虚假"值?
不幸的是,直到最近才这样做的唯一方法是遍历数组; 如果你在基于浏览器的应用程序中使用它,你可能必须这样做.ECMAScript第5版(新的JavaScript)中有新的数组功能,允许您以稍微不同的方式执行此操作,但只有一些浏览器支持它们(我不确定它们是否一定适用).
但是你在问题中描述的更多的是一个地图(或"字典;"有时称为关联数组)而不是一个数组(基于数字的索引的东西).在JavaScript中,"数组"通常用于表示数字索引的数组(例如,通过[]或创建new Array),"对象"通常用于地图(因为所有JavaScript对象都是地图).(这可能有点令人困惑,因为数组是对象.但不要担心.)所以这是一个数组:
var a = ['one', 'two', 'three'];
Run Code Online (Sandbox Code Playgroud)
...这是一个对象("地图","字典","关联数组"):
var o = {key1: 'one', key2: 'two', key3: 'three'};
Run Code Online (Sandbox Code Playgroud)
您使用非数字索引表明您实际上使用的是地图,而不是数组.搜索循环在地图上看起来像这样:
var key, found;
found = false;
for (key in arr) {
if (arr.hasOwnProperty(key)) {
if (!arr[key]) { // <== There are alternatives, see notes below
found = true;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我曾经在if (!arr[key])那里检查false价值.这实际上将停止false,undefined,null,或一个空字符串.如果你真的,真的想要false,请if (arr[key] === false)改用.