获取对象键的数组

2020/09/29 14:01 · javascript ·  · 0评论

我想以jQuery或纯JavaScript的形式获取JavaScript对象的键作为数组。

有没有比这更详细的方法?

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}

用途Object.keys

var foo = {
  'alpha': 'puffin',
  'beta': 'beagle'
};

var keys = Object.keys(foo);
console.log(keys) // ['alpha', 'beta'] 
// (or maybe some other order, keys are unordered).

这是ES5的功能。这意味着它可以在所有现代浏览器中使用,但不能在旧版浏览器中使用

ES5-shim有一个可以偷实现Object.keys

您可以使用jQuery的$.map

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
  return i;
});

当然,这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 }}}))

概要

要获取对象的所有键,可以使用Object.keys()Object.keys()将一个对象作为参数并返回所有键的数组。

例:

const object = {
  a: 'string1',
  b: 42,
  c: 34
};

const keys = Object.keys(object)

console.log(keys);

console.log(keys.length) // we can easily access the total amount of properties the object has

在上面的示例中,我们将键数组存储在键const中。然后,通过检查keys数组的长度,我们可以轻松访问对象上的属性数量。

通过以下方式获取值: Object.values()

的补充功能Object.keys()Object.values()此函数将对象作为参数并返回值数组。例如:

const object = {
  a: 'random',
  b: 22,
  c: true
};


console.log(Object.values(object));

如果您决定使用Underscore.js,则最好这样做

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
    keys.push(key);
});
console.log(keys);
本文地址:http://javascript.askforanswer.com/huoquduixiangjiandeshuzu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!