我找不到JavaScript中与PHP的array_keys()
/ array_values()
等价的方法。
对于不熟悉PHP的人,以下是JavaScript哈希表:
var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
我怎样可以得到一个键的数组,例如:
["apples", "oranges", "bananas"]
同样的问题,但是需要提供数值:
[3, 4, 42]
可以使用jQuery。
我找不到JavaScript中与PHP的array_keys()
/ array_values()
等价的方法。
对于不熟悉PHP的人,以下是JavaScript哈希表:
var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
我怎样可以得到一个键的数组,例如:
["apples", "oranges", "bananas"]
同样的问题,但是需要提供数值:
[3, 4, 42]
可以使用jQuery。
var keys = Object.keys(myHash);
var values = keys.map(function(v) { return myHash[v]; });
MDN上的Shims...
var values = keys.map(key=>myHash[key]);
- Dmitry Kozlovvar values = Object.values(myHash);
根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values 进行翻译。 - konyakvar 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);
for
循环内部的代码应该被包裹在一个检查中,以确保当前的键实际上是对象本身的属性(而不是继承属性)。否则,在IE浏览器中,您可能会得到一些意外的键:if(Object.prototype.hasOwnProperty.call(a, key)){array_keys.push(key); array_values.push(a[key]);}
- JAAuldeObject.prototype
中的成员应该被标记为不可枚举,并且在“foreach”中跳过,但是是的,我相信旧版IE可能会对此有问题。谢谢。 - ImpObject.prototype
添加可枚举属性,这很容易解决/撤销。 - user1106925第二个答案(截至撰写本文时)给出:
var values = keys.map(function(v) { return myHash[v]; });
但我更喜欢使用jQuery自带的$.map
函数:
var values = $.map(myHash, function(v) { return v; });
由于jQuery处理了跨浏览器兼容性的问题。而且它更短 :)
无论如何,我总是尽可能地保持功能性。一行代码比循环更好。
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) {...}
使用:
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)
这里是一个来自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;
}
{0: "test"}
是 Object
的一个实例,而 ["test"]
是 Array
的一个实例。但它们都有成员 0
,值为 "test"
。 - Impvar tmp_arr = []
这一行,它表明 tmp_arr
变量是一个数组 ([]
) 而不是一个对象 ({}
)。因此,两种方法都返回数组。 - VisioNkeys()
和 values()
,这些方法可能会返回对象,因为对于 JavaScript 迭代来说,{ 0 : 'a', 1 : 'b' }
和 ['a', 'b']
是相同的。我已经更新了上面的函数,使它们只返回数组。 - VisioN