获取对象键的数组

时间:2012-01-06 19:12:39

标签: javascript ecmascript-5

我希望将JavaScript对象的键作为数组,在jQuery或纯JavaScript中。

是否有比这更简洁的方式?

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

7 个答案:

答案 0 :(得分:557)

使用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功能。这意味着它适用于所有现代浏览器,但will not work in legacy browsers

ES5-shim有一个implementation of Object.keys you can steal

答案 1 :(得分:59)

您可以使用jQuery的$.map

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

答案 2 :(得分:30)

当然,Object.keys()是获取对象密钥的最佳方式。如果它在您的环境中不可用,则可以使用代码(例如在您的示例中)轻松 shimmed (除非您需要考虑您的循环将遍历原型链上的所有属性,不像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)不同。您只需使用shim on the MDN documentation

即可

答案 3 :(得分:6)

我不知道减少冗长,但我受到启发,通过单线请求将以下内容强制转换为一行,但不知道它是如何Pythonic;)

var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);

答案 4 :(得分:1)

摘要

要获取对象的所有键,可以使用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));

答案 5 :(得分:1)

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

data['classname']==ic

答案 6 :(得分:1)

如果您在这里寻找一些东西来将n深度嵌套对象的键列出为平面数组:

print("Welcome to EPA Mileage Calculator")
yearChoice = int(input("What year would you like to view data for? (2008 or 2009): "))
while yearChoice != 2008 and yearChoice != 2009:
    print("Invalid input, please try again")
    yearChoice = int(input("What year would you like to view data for? (2008 or 2009): "))
saveResults = input("Enter the filename to to save results to: ")

if yearChoice == 2008:
    fileIn = open("epaVehicleData2008.csv", "r")
    fileIn.readline()
    minMPG = []
    maxMPG = []
    for line in fileIn:
        line = line.strip()
        dataList = line.split(",")
        if dataList[0] not in ['VANS - PASSENGER TYPE', 'VANS - CARGO TYPE', 'TRUCK', 'MINIVAN - 4WD', 'MINIVAN - 2WD']:
            minMPG.append(dataList[8])
            #print(minMPG)
            maxMPG.append(dataList[8])
            #print(maxMPG)
    print(minMPG)
    print(min(minMPG))
    print(maxMPG)
    print(max(maxMPG))