[英]Assistance flattening an array of objects that has an object (or potential more than 1) within
我正在尝试展平一个对象数组,该对象数组在该对象中包含一个对象(但也可以包含更多对象)。 结果格式应该只是一个对象数组。
这是目前的情况:
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; }
从我的评论:尝试array.prototype.map
然后在每个对象array.prototype.reduce
。 想想冲突。 当你在孩子对象和父对象中有first_name
时,在最后一个对象中做什么。 你想保留两个,最后一个,第一个,一些随机的?
例如:
const flat = arr => arr.map(element =>
Object.entries(element).reduce((sum, [key, value]) => {
if (isObject(value)) {
return {...sum, ...value}
// or anything else to manage conflicts, depends on the way you want to handle it
}
return {...sum, [key]: value }
}, {}))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.