首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NodeJS中展开对象数组?

如何在NodeJS中展开对象数组?
EN

Stack Overflow用户
提问于 2016-07-21 07:20:40
回答 1查看 3.8K关注 0票数 4

我想要展开一个具有嵌套对象数组的对象数组。嵌套级别没有定义,而且在整个数组中也不一致。

这是我的样本数据

代码语言:javascript
复制
var data = [{
    id: 1,
    name: 'Harshal',
    subjects: [{
        id: 1,
        name: 'English',
        chapters: [{
            id: 1,
            name: 'Grammar'
        }, {
            id: 2,
            name: 'Comprehension'
        }]
    }, {
        id: 2,
        name: 'Maths',
        chapters: [{
            id: 1,
            name: 'Algebra'
        }, {
            id: 2,
            name: 'Geometry'
        }]
    }]
}, {
    id: 2,
    name: 'Pankaj',
    subjects: [{
        id: 3,
        name: 'Marathi',
        chapters: [{
            id: 1,
            name: 'Kavita',
            topics: [{
                id: 1,
                name: 'Topic 1'
            }]
        }]
    }, {
        id: 4,
        name: 'Hindi',
        chapters: [{
            id: 1,
            name: 'Katha',
            topics: [{
                id: 2,
                name: 'Topic 2'
            }, {
                id: 3,
                name: 'Topic 3'
            }]
        }]
    }]
}];

我想得到这样的输出:

代码语言:javascript
复制
var op = [{
    id: 1,
    name: 'Harshal',
    subjects: {
        id: 1,
        name: 'English',
        chapters: {
            id: 1,
            name: 'Grammar'
        }
    }
}, {
    id: 1,
    name: 'Harshal',
    subjects: {
        id: 1,
        name: 'English',
        chapters: {
            id: 2,
            name: 'Comprehension'
        }
    }
}, {
    id: 1,
    name: 'Harshal',
    subjects: {
        id: 2,
        name: 'Maths',
        chapters: {
            id: 1,
            name: 'Algebra'
        }
    }
}, {
    id: 1,
    name: 'Harshal',
    subjects: {
        id: 2,
        name: 'Maths',
        chapters: {
            id: 2,
            name: 'Geometry'
        }
    }
}, {
    id: 2,
    name: 'Pankaj',
    subjects: {
        id: 3,
        name: 'Marathi',
        chapters: {
            id: 1,
            name: 'Kavita',
            topics: {
                id: 1,
                name: 'Topic 1'
            }
        }
    }
}, {
    id: 2,
    name: 'Pankaj',
    subjects: {
        id: 4,
        name: 'Hindi',
        chapters: {
            id: 1,
            name: 'Katha',
            topics: {
                id: 2,
                name: 'Topic 2'
            }
        }
    }
}, {
    id: 2,
    name: 'Pankaj',
    subjects: {
        id: 4,
        name: 'Hindi',
        chapters: {
            id: 1,
            name: 'Katha',
            topics: {
                id: 3,
                name: 'Topic 3'
            }
        }
    }
}];

我曾试图与拉-解合作,但我想它有一些问题。如果有人有其他想法的话,我愿意实现这些想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 09:21:38

你试过递归吗?

代码语言:javascript
复制
var data = [{
    id: 1,
    name: 'Harshal',
    subjects: [{
        id: 1,
        name: 'English',
        chapters: [{
            id: 1,
            name: 'Grammar'
        }, {
            id: 2,
            name: 'Comprehension'
        }]
    }, {
        id: 2,
        name: 'Maths',
        chapters: [{
            id: 1,
            name: 'Algebra'
        }, {
            id: 2,
            name: 'Geometry'
        }]
    }]
}, {
    id: 2,
    name: 'Pankaj',
    subjects: [{
        id: 3,
        name: 'Marathi',
        chapters: [{
            id: 1,
            name: 'Kavita',
            topics: [{
                id: 1,
                name: 'Topic 1'
            }]
        }]
    }, {
        id: 4,
        name: 'Hindi',
        chapters: [{
            id: 1,
            name: 'Katha',
            topics: [{
                id: 2,
                name: 'Topic 2'
            }, {
                id: 3,
                name: 'Topic 3'
            }]
        }]
    }]
}];

function unravel(obj)
{
    var out = [];
    var added = false;
    for(var i in obj) {
	if(obj[i] instanceof Array) {
	    for(var j in obj[i]) {
		var r = unravel(obj[i][j]);
		for(var k in r) {
		    var a = {};
		    for(var key in obj) { // make copy of obj
			a[key] = obj[key];
		    }
		    a[i] = r[k];
		    added = true;
		    out.push(a);
		}
	    }
	}
    }
    if(!added) {
	out.push(obj);
    }
    return out;
}

var op = [];
for(var i in data)
    op = op.concat(unravel(data[i]));
console.log(JSON.stringify(op, null, 4));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38497546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档