我想获得一个JavaScript对象的键作为一个数组,无论是在jQuery或纯JavaScript。
还有比这更简洁的方法吗?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
我想获得一个JavaScript对象的键作为一个数组,无论是在jQuery或纯JavaScript。
还有比这更简洁的方法吗?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
当前回答
当然,Object.keys()是获取对象键的最佳方法。如果它在您的环境中不可用,则可以使用您的示例中的代码简单地填充它(除非您需要考虑到您的循环将遍历原型链上的所有属性,而不像Object.keys()的行为)。
然而,你的示例代码…
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
jsFiddle。
...可以被修改。你可以在变量部分做赋值。
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}
jsFiddle。
当然,这种行为不同于Object.keys()的实际行为(jsFiddle)。您可以简单地使用MDN文档中的填充。
其他回答
总结
要获取一个对象的所有键,可以使用Object.keys()。object .keys()接受一个对象作为参数,并返回一个包含所有键的数组。
例子:
Const对象= { 答:“string1”, b: 42岁 c: 34 }; const keys = object .keys(对象) console.log(键); Console.log (keys.length) //我们可以很容易地访问对象的属性总数
在上面的例子中,我们在keys const中存储了一个键数组。然后,我们可以通过检查keys数组的长度轻松访问对象上的属性数量。
使用Object.values()获取值
Object.keys()的补充函数是Object.values()。这个函数以一个对象作为参数,并返回一个值数组。例如:
Const对象= { 答:“随机”, b: 22日 c:真 }; console.log (Object.values(对象));
2022年,JavaScript还没有一个合理的方法来处理哈希?
这将发出警告,但有效:
Object.prototype.keys = function() { return Object.keys(this) }
console.log("Keys of an object: ", { a:1, b:2 }.keys() )
// Keys of an object: Array [ "a", "b" ]
// WARN: Line 8:1: Object prototype is read only, properties should not be added no-extend-native
也就是说,扩展内置对象是有争议的。
当然,Object.keys()是获取对象键的最佳方法。如果它在您的环境中不可用,则可以使用您的示例中的代码简单地填充它(除非您需要考虑到您的循环将遍历原型链上的所有属性,而不像Object.keys()的行为)。
然而,你的示例代码…
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.push(key);
}
jsFiddle。
...可以被修改。你可以在变量部分做赋值。
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}
jsFiddle。
当然,这种行为不同于Object.keys()的实际行为(jsFiddle)。您可以简单地使用MDN文档中的填充。
我不知道是否更啰嗦,但我受到了一行请求的启发,将以下内容强制到一行中,尽管不知道它有多Pythonic;)
var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);
如果你在这里找一些东西来列出一个n深度嵌套对象的键作为一个平面数组:
const getObjectKeys = (obj, prefix = '') => { return Object.entries(obj).reduce((collector, [key, val]) => { const newKeys = [ ...collector, prefix ? `${prefix}.${key}` : key ] if (Object.prototype.toString.call(val) === '[object Object]') { const newPrefix = prefix ? `${prefix}.${key}` : key const otherKeys = getObjectKeys(val, newPrefix) return [ ...newKeys, ...otherKeys ] } return newKeys }, []) } console.log(getObjectKeys({a: 1, b: 2, c: { d: 3, e: { f: 4 }}}))