散列键/值作为数组

gre*_*ire 57 javascript hashmap

我找不到javascript相当于php array_keys()/array_values()

对于不熟悉php的人给出以下js哈希:

var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
Run Code Online (Sandbox Code Playgroud)

我如何获得一系列键,即

["apples", "oranges", "bananas"]
Run Code Online (Sandbox Code Playgroud)

与值相同的问题,即

[3, 4, 42]
Run Code Online (Sandbox Code Playgroud)

可以使用jQuery.

小智 80

在ES5支持(或shimmed)浏览器...

var keys = Object.keys(myHash);

var values = keys.map(function(v) { return myHash[v]; });
Run Code Online (Sandbox Code Playgroud)

来自MDN的垫片......

  • `var values = Object.values(myHash);` 根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values (5认同)

Imp*_*Imp 47

var a = {"apples": 3, "oranges": 4, "bananas": 42};    

var array_keys = new Array();
var array_values = new Array();

for (var key in a) {
    array_keys.push(key);
    array_values.push(a[key]);
}

alert(array_keys);
alert(array_values);
Run Code Online (Sandbox Code Playgroud)

  • 但是,`for`循环的内部应该包含在一个检查中,即当前密钥实际上是问题所在的对象(而不是继承的属性).否则,在IE中,你可以得到一些意想不到的键:`if(Object.prototype.hasOwnProperty.call(a,key)){array_keys.push(key); array_values.push(a [key]);}` (9认同)

Lit*_*ral 15

第二个答案(在撰写本文时)给出:

var values = keys.map(function(v) { return myHash[v]; });
Run Code Online (Sandbox Code Playgroud)

但我更喜欢使用jQuery自己的$.map:

var values = $.map(myHash, function(v) { return v; });
Run Code Online (Sandbox Code Playgroud)

由于jQuery负责跨浏览器兼容性.再加上它更短:)

无论如何,我总是尽量保持功能.单行是比循环更好的.


Jos*_*itt 10

查看lodash或下划线中的_.keys()和_.values()函数