如何根据嵌套对象属性调整由嵌套对象构成的数组结构
实现代码
你可以先把所有语言对应的书籍映射聚合到一个临时对象,再转成目标数组结构即可,完整可运行代码如下:
const data = [ { name: 'Book_1', value: { eng: 'english_book_1', sp: 'spanish_book_1' } }, { name: 'Book_2', value: { eng: 'english_book_2', sp: 'spanish_book_2' } } ]; // 临时聚合对象,存储每个语言对应的所有书籍键值对 const langAggregate = {}; data.forEach(bookItem => { // 遍历单本书的所有语言版本 Object.entries(bookItem.value).forEach(([langKey, langValue]) => { // 首次遇到该语言时初始化空对象 if (!langAggregate[langKey]) { langAggregate[langKey] = {}; } // 写入当前书籍的对应语言值 langAggregate[langKey][bookItem.name] = langValue; }) }) // 把聚合对象转成你需要的数组结构 const modified = Object.entries(langAggregate).map(([lang, bookMap]) => { return { [lang]: bookMap }; }) console.log(modified);
原有代码问题说明
- 只在循环外声明了一个
object对象,所有操作都在修改同一个对象的引用,最终数组里所有元素都会指向同一个对象 - 没有实际给
object写入你需要的语言、书籍键值对,核心逻辑是空的 - 每次内层循环都直接往数组push对象,会出现大量重复无效元素
内容的提问来源于stack exchange,提问作者zana10
相关产品推荐
相关产品推荐

