检查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中使数组中的所有数字成为绝对值[关闭]

使用2索引从数组中提取最小值[关闭]

javascript [Find Place]用于根据值#vanilla #script检索给定数字在数组中的位置的索引的脚本

如何通过索引检查数组对象中的答案?

在javascript中搜索对象中的值[关闭]