我正在尝试展平对象数组,这些对象在该对象中有一个对象(但也可以有更多)。生成的格式应该只是一个对象数组。
目前是这样的:
var array = [
{
nickname: "Johnny",
first_name: "John",
last_name: "Smith",
info: {
married: "yes",
kids_ages: []
}
},
{
{
nickname: "Ron",
first_name: "Ronald",
last_name: "Smith",
info: {
married: "no",
kids_ages: []
}
},
{
nickname: "Johnny",
first_name: "John",
last_name: "Smith",
info: {
married: "yes",
kids_ages: [17]
},
kids: {
first_name: "Harry",
last_name: "Smith
}
}
]
第一个条目应该是这样的:
{
nickname: "Johnny",
first_name: "John",
last_name: "Smith",
married: "yes"
kids_ages: []
},
最佳答案
您可以从对象中获取 info
并将此对象与其余对象一起分配给单个对象。
var array = [{ nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [] } }, { nickname: "Ron", first_name: "Ronald", last_name: "Smith", info: { married: "no", kids_ages: [] } }, { nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [17] }, kids: { first_name: "Harry", last_name: "Smith" } }],
flat = array.map(({ info, ...object }) => ({ ...object, ...info }));
console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }
另一种方法是将外部对象的键作为前缀。
function getFlat(object, parent) {
return Object.assign({}, ...Object.entries(object).map(([k, v]) => {
if (v && typeof v === 'object' && !Array.isArray(v)) {
return getFlat(v, k);
}
return { [parent + (parent && '_') + k]: v };
}));
}
var array = [{ nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [] } }, { nickname: "Ron", first_name: "Ronald", last_name: "Smith", info: { married: "no", kids_ages: [] } }, { nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [17] }, kids: { first_name: "Harry", last_name: "Smith" } }],
flat = array.map(o => getFlat(o));
console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 协助展平包含一个对象(或可能超过 1 个)的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852437/