如何在Javascript中获取数组键?

Dis*_*oat 72 javascript arrays key

我有一个使用此代码创建的数组:

var widthRange = new Array();
widthRange[46] = { min:0,  max:52 };
widthRange[66] = { min:52, max:70 };
widthRange[90] = { min:70, max:94 };
Run Code Online (Sandbox Code Playgroud)

我想在一个循环中得到每个值46,66,90.我试过for (var key in widthRange)但这给了我一大堆额外的属性(我假设它们是对象上的函数).我不能使用常规for循环,因为值不是顺序的.

SLa*_*aks 95

您需要调用该hasOwnProperty函数来检查属性是否实际定义在对象本身(而不是其原型),如下所示:

for (var key in widthRange) {
    if (key === 'length' || !widthRange.hasOwnProperty(key)) continue;
    var value = widthRange[key];
}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要单独检查length.
但是,你根本不应该在这里使用数组; 你应该使用常规对象.所有Javascript对象都充当关联数组.

例如:

var widthRange = { };  //Or new Object()
widthRange[46] = { sel:46, min:0,  max:52 };
widthRange[66] = { sel:66, min:52, max:70 };
widthRange[90] = { sel:90, min:70, max:94 };
Run Code Online (Sandbox Code Playgroud)

  • 真?哇,我每天都在这里学到一些东西,所以经常是你的SLaks :-)我很惊讶Array跟踪它的显式设置索引.也许我不应该. (2认同)
  • 为什么你需要单独检查`length`?是不是在所有浏览器中都标记为`[[DontEnum]]`? (2认同)

thS*_*oft 71

可以使用查询字符串化键Object.keys(array).

  • 这会将键作为字符串返回,而不是数字,这样每个人都知道. (3认同)

Mik*_*Kay 18

如果您正在进行任何类型的数组/集合操作或检查,我强烈建议您使用Underscore.js.它很小,经过充分测试,可以节省几天/几周/年的javascript头痛.这是它的键功能:

按键

检索对象属性的所有名称.

_.keys({one : 1, two : 2, three : 3});
=> ["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)