检查javascript数组中的数字索引[关闭]
Posted
技术标签:
【中文标题】检查javascript数组中的数字索引[关闭]【英文标题】:Checking for a numerical index in a javascript array [closed] 【发布时间】:2013-06-19 04:25:33 【问题描述】:我正在接收按数字索引聚合的 json 数据。
例如,当我在我的 forloop 中时,索引可能从 1 开始,这意味着在我的 forloop 中会发生错误,因为 0 不存在。
如何检查 javascript 数组中是否存在数字索引?
【问题讨论】:
让我们看一个这个json数据的例子 索引not怎么可能存在于数组中?你的意思是它的价值是undefined
,对吧?
请发一个例子。如果没有具体的例子,问题中的问题描述通常很难回答。
您尚未发布任何代码让我们了解您为什么会出现错误,但作为建议,您是否考虑过使用Array.prototyp.forEach?这很可能会解决您的问题(除非Array.length
已损坏),而无需您向我们展示任何代码。 ://
这是一个有效的问题。 JavaScript 中的数组可以是稀疏的。它们基本上是具有一些特殊属性的对象。
【参考方案1】:
var a = [1, 2, 3], index = 2;
if ( a[index] !== void 0 ) /* void 0 === undefined */
/* See concern about ``undefined'' below. */
/* index doesn't point to an undefined item. */
【讨论】:
或if (index in a)
将在技术上检查是否存在,尽管您的!== undefined
检查很可能就足够了。
typeof a[index] !== 'undefined' 应该更安全
@Aubin 为什么?如果a
没有定义,它会在尝试访问[index]
时同样失败。
@SammieFox 如果开发人员创建了一个以undefined
作为参数名称的函数,那么无论使用何种编程语言,他都值得被活剥皮,如果他使用JS 编码,则值得在之后被煮沸. FWIW,我不会因为这个原因而使用void 0
而不是undefined
- 它不是“防御性编码”,而是自 ES5 以来的“偏执编码”。 void 0
是语义噪音,undefined
在语义上是正确的。我们应该以人为本,而不是计算机,IMVHO。
@vaxquis 将 undefined 设置为(未定义的)参数值,是 IIFE 模式的推荐编码样式,以确保 undefined 参数确实未定义并且尚未在范围之外定义(例如通过第三方脚本)。但是,是的,自从具有严格模式的 ES5 以来,它是不必要的。 books.google.de/… ---- toddmotto.com/…【参考方案2】:
如果您实际描述的是Object
而不是Array
,但它是数组,因为它具有uint32_t 的属性但没有基本的length
属性存在。然后你可以将它转换成这样的真实数组。浏览器兼容性方面需要支持hasOwnProperty
Javascript
function toArray(arrayLike)
var array = [],
i;
for (i in arrayLike)
if (Object.prototype.hasOwnProperty.call(arrayLike, i) && i >= 0 && i <= 4294967295 && parseInt(i) === +i)
array[i] = arrayLike[i];
return array;
var object =
1: "a",
30: "b",
50: "c",
,
array = toArray(object);
console.log(array);
输出
[1: "a", 30: "b", 50: "c"
]`
开启jsfiddle
好的,现在您有一个人口稀少的数组,并希望使用 for
循环来做一些事情。
Javascript
var array = [],
length,
i;
array[1] = "a";
array[30] = "b";
array[50] = "c";
length = array.length;
for (i = 0; i < length; i += 1)
if (Object.prototype.hasOwnProperty.call(array, i))
console.log(i, array[i]);
输出
1 "a"
30 "b"
50 "c"
开启jsfiddle
或者,如果您的浏览器支持,您可以使用 Array.prototype.forEach
,或者我链接的 MDN 页面上提供的可用 shim,或 es5_shim
Javascript
var array = [];
array[1] = "a";
array[30] = "b";
array[50] = "c";
array.forEach(function (element, index)
console.log(index, element);
);
输出
1 "a"
30 "b"
50 "c"
开启jsfiddle
【讨论】:
汽车解释否决票?【参考方案3】:你应该可以使用for(key in data)
var data = [];
data[1] = 'a';
data[3] = 'b';
for(var index in data)
console.log(index+":"+data[index]);
//Output:
// 1-a
// 3-b
如果索引不连续,它将遍历数据中的每个关键项。
【讨论】:
以上是关于检查javascript数组中的数字索引[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将在JavaScript中保存为数组的数字与while循环相加
在Javascript中使数组中的所有数字成为绝对值[关闭]
javascript [Find Place]用于根据值#vanilla #script检索给定数字在数组中的位置的索引的脚本