我无法找到PHP array_keys()
/array_values()
哈希键/值数组
的JavaScript的等价物的人不熟悉PHP给出下面的JS散:
var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
我怎样才能得到钥匙的数组,即
["apples", "oranges", "bananas"]
与价值观相同的问题,即
[3, 4, 42]
jQuery可以使用。
我无法找到PHP array_keys()
/array_values()
哈希键/值数组
的JavaScript的等价物的人不熟悉PHP给出下面的JS散:
var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
我怎样才能得到钥匙的数组,即
["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);
+1,但是'for'循环的内部应该包含在一个检查中,即当前键实际上是Object自己的属性(而不是继承的属性)。否则,在IE中,你可以得到一些意想不到的键:'if(Object.prototype.hasOwnProperty.call(a,key)){array_keys.push(key); array_values.push(a [key]);}' – JAAulde
@ JAAulde:我不知道任何这样的IE问题。枚举对象时。你能否进一步描述这个问题?什么钥匙将被发现? – 2012-05-02 13:58:34
@amnotiam Crockford在他的LINT说明中推荐它,网址是http://www.JSLint.com/lint.html#forin,并参考他在http://yuiblog.com/blog/2006/09/上撰写的文章26/for-in-intrigue/ – JAAulde
在ES5支持(或垫高)浏览器...
var keys = Object.keys(myHash);
var values = keys.map(function(v) { return myHash[v]; });
从MDN垫片...
+1,你能否详细说明这些浏览器是什么? – greg0ire
@ greg0ire:支持的浏览器通常是任何现代浏览器。一般来说,大多数使用的Chrome和Safari,Firefox 4 +,Opera 10+ *(可能更早?)*和IE9。您可以轻松地使用这两种方法来支持传统浏览器。 – 2012-05-02 14:00:26
@ greg0ire:我添加了由MDN提供的垫片的链接。 – 2012-05-02 14:07:51
function getKeys(obj){
var keys = [];
for (key in obj) {
if (obj.hasOwnProperty(key)) { keys[keys.length] = key; }
}
return keys;
}
+1与hasOwnProperty适当的检查(虽然我更愿意把它关闭的Object.prototype) – JAAulde
你正在展示的功能似乎不是返回数组的哈希值或者是{ 0:“test”}是否为[“test”]的同义词? – greg0ire
这里是从array_keys
PHP.js library一个很好的例子:
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
(from the same PHP.js library):
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)
第二个答案(在写作的时候)给出:
var values = keys.map(function(v) { return myHash[v]; });
但我更喜欢使用jQuery自己$.map
:
var values = $.map(myHash, function(v) { return v; });
由于jQuery负责c ross-browser兼容性。加上它更短:)
无论如何,我总是尽可能地发挥功能。单轮比圈更好。
看_.keys()和_.values()函数在任一lodash或下划线
可能重复[获取对象的键的数组](http://stackoverflow.com/questions/8763125/get-array-的对象键)和[如何获得一个Javascript对象的所有属性值(不知道键)?](http://stackoverflow.com/questions/7306669/how-to-get-all-properties-values -of-A-JavaScript的对象,而无需知-的键)。 –