let response = {
data1: {
names: ["John", "jim"]
},
data2: {
ages: [34, 24]
}
}
我想要:
data: {
names: ["John", "jim"],
ages: [34,24]
}
有没有一种方法可以在不引用response.data1
和response.data2
的情况下将它们合并为一个对象?我知道我可以做const newObj = {...response.data1, ...response.data2}
或Object.assign({}, response.data1, response.data1)
。。。我可以通过for in
循环吗?
您可以使用Object.assign()
合并对象的值,如下所示:
Object.assign({}, ...Object.values(response))
解释:
这是Object.assign的语法:Object.assign(target, source1, source2, ... etc)
。它基本上从源对象获取所有属性,并更新目标目标
Object.values()
位返回response
对象的值。在这种情况下,它是一个像这样的对象数组:
[
{ names: ["John", "jim"] },
{ ages: [34, 24] }
]
您可以展开数组并将单个对象作为参数传递给Object.assign()
这里有一个片段:
let response = {
data1: {
names: ["John", "jim"]
},
data2: {
ages: [34, 24]
}
}
const output = Object.assign({}, ...Object.values(response))
console.log(output)
如果太令人困惑,可以使用reduce
:
Object.values(response)
.reduce((a, v) => ({ ...a, ...v }), {})
或者一个简单的循环:
const output = {}
for(const key in response)
Object.assign(output, response[key])
如果您想使用for in
循环合并data1
和data2
,请尝试以下操作:
let response = {
data1: {
names: ["John", "jim"]
},
data2: {
ages: [34, 24]
}
}
var result = {}
for (data in response) {
if (response.hasOwnProperty(data)) {
[key] = Object.keys(response[data])
result[key] = response[data][key]
}
}
console.log(result)
它的工作方式是获取data
和data2
的密钥,然后使用这些密钥,获取值并将其添加到result