我有一个生成的对象数组,如下所示:
[
{obj1: {
key: 'value'
}},
{obj2: {
key: 'value2'
}},
{obj3: {
key: 'value3'
}}
]
我想用以下输出展平数组:
[
{
key: 'value'
},
{
key: 'value2'
},
{
key: 'value3'
}
]
我正在使用for循环来执行此操作,该循环可以工作,但是数组的大小会很大,想知道是否有更有效的方法可以做到这一点?
for (var key in array) {
let obj = array[key];
for (var key in obj) {
newArray.push(obj[key]);
}
}
output:
newArray: [
{
key: 'value'
},
{
key: 'value2'
},
{
key: 'value3'
}
]
已更新以反映正确的数组格式。
答案 0 :(得分:2)
您可以简单地使用reduce和Object.values
let arr = [{obj1: {key: `value`}},{obj2: {key: `value2`
}},{obj3: {key: `value3`}}]
let op = arr.reduce((op,e)=> op.concat(Object.values(e)),[])
console.log(op)
关心速度时,可以使用简单的for
循环。
let arr = [{obj1: {key: `value`}},{obj2: {key: `value2`
}},{obj3: {key: `value3`}}]
let op = []
for(let i=0; i<arr.length; i++){
let values = Object.values(arr[i])
op = op.concat(values)
}
console.log(op)
答案 1 :(得分:1)
您可以使用Array.map和Object.values。
映射将数组中的每个元素“映射”到新数组。
它接受数组的每个元素,并对其执行操作。
此操作的结果成为新Array中的相应元素。
这个新的数组就是返回的。
要将对象转换为数组:您可以使用Object.values
,Object.keys
和Object.entries
。
Object.values
取消引用对象中的每个键,并将其转换为保存该键值的数组元素。
const arr = [
{obj1: {key: 'value'}},
{obj2: {key: 'value2'}},
{obj3: {key: 'value3'}}
];
let newArr = arr.map(obj => (
{key: Object.values(obj)[0].key}
));
console.log(newArr);
要返回对象,必须将其包装在括号中。
在第一次迭代中,obj
== { obj1: { key: 'value' }}
,即输入数组arr
中的第一个元素。
然后
Object.values(obj)
== [{key: 'value'}]
因此,我们需要获取索引0
处的元素以将对象从数组{key: 'value'}
中拉出。
或者,如果您知道可以依赖数组中元素的命名结构(外部对象的键),则可以 执行此操作,这样可能更容易推理: >
const arr = [
{obj1: {key: 'value'}},
{obj2: {key: 'value2'}},
{obj3: {key: 'value3'}}
];
let newArr2 = arr.map( (obj, i) => (
{ key: obj['obj'+(i+1)].key }
));
console.log(newArr2);
注意:您需要将i+1
括在括号中,以强制添加优先于JS自动类型转换和字符串连接。否则,您将获得obj1, obj2, obj3
作为对象键,而不是obj01, obj11, obj21
。