获取JavaScript对象键列表卷。 2

时间:2017-07-14 09:05:13

标签: javascript arrays object

以下是原始问题:Getting JavaScript object key list

但如果情况稍微复杂一点:

var obj = [
   { key1: 'value1' },
   { key2: 'value2' },
   { key3: 'value3' },
   { key4: 'value4' }
]

那你怎么得到这样的钥匙?

[key1,key2,key3,key4]

6 个答案:

答案 0 :(得分:15)

您可以混用使用Object.keysArray#map



let obj = [
   { key1: 'value1' },
   { key2: 'value2' },
   { key3: 'value3' },
   { key4: 'value4' },
];

let keys = [].concat(...obj.map(Object.keys));

console.log(keys);




答案 1 :(得分:7)

您可以获取obj中每个对象的键,然后使用concat()将其添加到结果数组中。



    var obj = [
       {
           key1: 'value1'
       },
       {
           key2: 'value2'
       },
       {   
           key3: 'value3'
       },
       {   
           key4: 'value4'
       }
    ]
var keyList = [];
obj.forEach(function(o){
    keyList = keyList.concat(Object.keys(o));
});
console.log(keyList);




答案 2 :(得分:5)

您可以使用Array#reduce方法实现它。



var obj = [{
  key1: 'value1'
}, {
  key2: 'value2'
}, {
  key3: 'value3'
}, {
  key4: 'value4'
}];

var res = obj
  // iterate over the array
  .reduce(function(arr, o) {
    // get keys and push into the array
    [].push.apply(arr, Object.keys(o));
    // return the araray reference
    return arr;
    // set initial value as an empty array
  }, []);

console.log(res);

// ES6 alternative
var res1 = obj.reduce((arr, o) => (arr.push(...Object.keys(o)), arr), []);

console.log(res1);




答案 3 :(得分:1)

尝试使用Array#reduce()Object.keys() .Reduce使用函数创建数组,forEach迭代内部对象键



var obj = [ { key1: 'value1' }, { key2: 'value2' }, { 
key3: 'value3' }, { 
key4: 'value4' } ]


console.log(obj.reduce(function(a,b){
 Object.keys(b).forEach(function(val){
   a.push(val)
  })
  return a;
},[]))




答案 4 :(得分:1)

您可以使用 for in 迭代对象属性,类似这样。

GoogleMapsAPIWrapper

答案 5 :(得分:0)

使用箭头,由于[0]:/

,看起来有些奇怪

var obj = [
   { key1: 'value1' },
   { key2: 'value2' },
   { key3: 'value3' },
   { key4: 'value4' }
];

var result = obj.map(x => Object.keys(x)[0]);

console.log(result);

如果有多个键值对,那么

obj.map(Object.keys).reduce((a, b) => a.concat(b));

其他方式:

[].concat(...obj.map(Object.keys));

[].concat.apply(this, obj.map(Object.keys));

或者使用Lodash(我经常使用

_.flatten(obj.map(Object.keys))