如何获得在JavaScript字典中的键的集合?
我有字典:
var driversCounter = { "one": 1, "two": 2, "three": 3, "four": 4, "five": 5 }
现在,我需要在下拉列表中显示它。 如何获得我的字典中的密钥集合?
使用Object.keys()
或在旧浏览器中将其填充 。
另外,考虑到你的用例,也许这会做到这一点…
var selectBox, option, prop; selectBox = document.getElementById("drivers"); for (prop in driversCounter) { option = document.createElement("option"); option.textContent = prop; option.value = driversCounter[prop]; selectBox.add(option); }
一个选项是使用Object.keys()
:
Object.keys(driversCounter)
它适用于现代浏览器(但是,IE仅支持从版本9开始)。
要添加兼容的支持,您可以复制MDN中提供的代码片段。
循环“字典”(我们称之为JS中的对象),使用for in
循环:
for(var key in driversCounter) { if(driversCounter.hasOwnProperty(key)) { //key = keys, left of the ":" //driversCounter[key] = value, right of the ":" } }
这将在所有JavaScript实现中起作用:
var keys = []; for (var key in driversCounter) { if (driversCounter.hasOwnProperty(key)) { keys.push(key); } }
像之前提到的其他人一样,您可以使用Object.keys
,但在旧引擎中可能不起作用。 所以你可以使用下面的猴子补丁:
if (!Object.keys) { Object.keys = function (object) { var keys = []; for (var key in object) { if (object.hasOwnProperty(key)) { keys.push(key); } } } }
用现代的JS引擎,你可以使用Object.keys(driversCounter)
使用Object.Keys()
var driversCounter = { "one": 1, "two": 2, "three": 3, "four": 4, "five": 5 } console.log(Object.keys(driversCounter));
对于新的浏览器: Object.keys( MY_DICTIONARY )
将返回一个键数组。 否则你可能要走老派的路:
var keys = [] for(var key in dic) keys.push( key );
正如其他人所说,你可以使用Object.keys()
,但谁在乎旧的浏览器,对不对?
那么,我呢。
试试这个 。 PHPJS端口中的array_keys
PHP方便的array_keys
函数可以在JS中使用。 一目了然,如果支持的话,它使用Object.keys
,但是处理不太容易的情况。 它甚至包括基于您可能正在查找的值(可选)筛选键和是否使用严格比较===
与types转换比较==
(可选)
如果你可以使用JQuery那么
var keys = []; $.each(driversCounter, function(key, value) { keys.push(key); }); console.log(JSON.stringify(keys));
这里跟着答案:
["one","two","three","four","five"]
这样你就不用担心浏览器是否支持Object.keys
方法。
另一种方法是使用multidimensional array:
var driversCounter = [ ["one", 1], ["two", 2], ["three", 3], ["four", 4], ["five", 5] ]
并通过driverCounter [k] [j]访问该值,其中j = 0,1。
将其添加到下拉列表中:
var dd = document.getElementById('your_dropdown_element'); for(i=0;i<driversCounter.length-1;i++) { dd.options.add(opt); opt.text = driversCounter[i][0]; opt.value = driversCounter[i][1]; }