通过循环组合两个对象


let response = {
data1: {
names: ["John", "jim"]
},
data2: {
ages: [34, 24]
}
}

我想要:

data: {
names: ["John", "jim"],
ages: [34,24]
}

有没有一种方法可以在不引用response.data1response.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循环合并data1data2,请尝试以下操作:

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)

它的工作方式是获取datadata2的密钥,然后使用这些密钥,获取值并将其添加到result

最新更新