哈希键/值作为数组
我找不到相当于php的array_keys()
/ array_values()
对于不熟悉php的人,给出以下js哈希值:
var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
我怎样才能得到一个键arrays,即
["apples", "oranges", "bananas"]
与价值观相同的问题,即
[3, 4, 42]
jQuery可以使用。
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);
在ES5支持(或微调)浏览器…
var keys = Object.keys(myHash); var values = keys.map(function(v) { return myHash[v]; });
来自MDN的垫片…
-
Object.keys
-
Array.prototype.map
第二个答案(写作时)给出:
var values = keys.map(function(v) { return myHash[v]; });
但我更喜欢使用jQuery自己的$.map
:
var values = $.map(myHash, function(v) { return v; });
由于jQuery负责跨浏览器的兼容性。 加上它更短:)
无论如何,我总是尽可能地发挥function。 单轮比圈更好。
请查看lodash或下划线中的_.keys()和_.values()函数
- 下划线_.keys
- 下划线_.values
- lodash _.keys
- lodash _.values
function getKeys(obj){ var keys = []; for (key in obj) { if (obj.hasOwnProperty(key)) { keys[keys.length] = key; } } return keys; }
不知道它是否有帮助,但“foreach”会遍历所有的键:for(var key in obj1){…}
这里是phpjs.org的实现:
- array_values
- array_keys
这不是我的代码,我只是把你指向一个有用的资源。
下面是PHP.js库中array_keys
一个很好的例子:
function array_keys (input, search_value, argStrict) { // Return just the keys from the input array, optionally only for the specified search_value var search = typeof search_value !== 'undefined', tmp_arr = [], strict = !!argStrict, include = true, key = ''; for (key in input) { if (input.hasOwnProperty(key)) { include = true; if (search) { if (strict && input[key] !== search_value) { include = false; } else if (input[key] != search_value) { include = false; } } if (include) { tmp_arr[tmp_arr.length] = key; } } } return tmp_arr; }
array_values
( 来自相同的PHP.js库 )也是如此:
function array_values (input) { // Return just the values from the input array var tmp_arr = [], key = ''; for (key in input) { tmp_arr[tmp_arr.length] = input[key]; } return tmp_arr; }
编辑:从代码中删除不必要的子句。
var myHash = {"apples": 3, "oranges": 4, "bananas": 42} vals=(function(e){a=[];for (var i in e) a.push(e[i]); return a;})(myHash).join(',') keys=(function(e){a=[];for (var i in e) a.push( i ); return a;})(myHash).join(',') console.log(vals,keys)
基本上
array=(function(e){a=[];for (var i in e) a.push(e[i]); return a;})(HASHHERE)