以下是原始问题:获取JavaScript对象键列表
但如果情况稍微复杂一些,例如:
var obj = [
{ key1: 'value1' },
{ key2: 'value2' },
{ key3: 'value3' },
{ key4: 'value4' }
]
那么你如何获得这样的键?
[key1,key2,key3,key4]
以下是原始问题:获取JavaScript对象键列表
但如果情况稍微复杂一些,例如:
var obj = [
{ key1: 'value1' },
{ key2: 'value2' },
{ key3: 'value3' },
{ key4: 'value4' }
]
[key1,key2,key3,key4]
您可以使用Object.keys
和Array#flatMap
的组合。
let obj = [
{ key1: 'value1' },
{ key2: 'value2' },
{ key3: 'value3' },
{ key4: 'value4' },
];
let keys = obj.flatMap(Object.keys);
console.log(keys);
[].concat(...obj.map(Object.keys));
。 - Mr_Greenconcat()
将其添加到你的结果数组中。
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);
您可以使用 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);
"Uncaught SyntaxError: Unexpected token {",
- Cerbrusreduce
中看到arr.push
改变数组的行为让我感到很奇怪。为什么不返回[...arr, Object.keys(o)]
,或者使用concat
做同样的事情呢? - Tom Fenechmap()
方法比reduce()
更好,至于是否更好,我不确定:) - Pranav C Balanfor
循环。 - Tom FenechArray#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;
},[]))
var obj = [
{ key1: 'value1' },
{ key2: 'value2' },
{ key3: 'value3' },
{ key4: 'value4' }
],
keysArray = [];
obj.forEach((item)=>{
for(key in item){
keysArray.push(key);
}
});
console.log(keysArray);
使用箭头,因为[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))
obj
不是一个普通对象,而是一个数组。 - Kevin