哈希键/值作为数组

我找不到相当于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)