javascript - 展平对象数组

标签 javascript arrays javascript-objects

我有一个来自 formData serializeArray 函数的对象数组。例如:

[
        0 : {name: 'animal_monkey', value: 'banana'}
        1 : {name: 'animal_horse', value: 'radishes'}
        2 : {name: 'fruit_banana', value: 'yellow'}
        3 : {name: 'fruit_apple', value: 'red'}
]

我正在寻找一种方法将这些不同的元素放入一个对象中,按类别分割并为其分配适当的值,如下所示:

{ 
        animal: { 
                        monkey : banana,
                        horse : radishes
                },
        fruit: {
                        banana : yellow,
                        apple : red
               }
}

我尝试使用reduce和对象分配来做到这一点,就像这样

obj = keys.map((k, i) => k.reduceRight((value, key) => ({[key]: value}), vals[i]) )
result = Object.assign({}, ...obj)

其中keys是['animal_monkey', 'animal_horse', 'fruit_banana', 'fruit_apple']数组,vals是一个包含值的列表:['banana', 'radishs', 'yellow', 'red' ]。然而,也许正如预期的那样,这些值被覆盖,我最终得到:

{ 
        animal: { 
                        horse : radishes
                },
        fruit: {
                        apple : red
               }
}

第一个值在赋值后无法保留。有人知道如何使这项工作有效吗?

谢谢!

最佳答案

您可以在 _ 上拆分每个name,然后使用 array#reduce 创建一个包含类别和动物名称的对象。

const data = [ {name: 'animal_monkey', value: 'banana'}, {name: 'animal_horse', value: 'radishes'}, {name: 'fruit_banana', value: 'yellow'}, {name: 'fruit_apple', value: 'red'} ],
      result = data.reduce((r,o) => {
            const [category, name] = o.name.split('_');
            r[category] ??= {};
            r[category][name] = o.value;
            return r;
      }, {});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 展平对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69947512/

相关文章:

javascript - 当父位置改变时 JQuery 删除元素

javascript - JavaScript 关联数组的长度

javascript - Google 脚本将一个单元格写入另一个电子表格中的范围

javascript - 尝试创建二叉树,但我的下线顺序不正确

javascript - 我是否使用了正确的 jQuery 语法?

arrays - 将 Firebase 数据存储为数组,然后使用此数组创建饼图

ruby - 获取范围内的项目

arrays - 使用灵活数组成员延迟指向结构的指针不是 "copy"FAM?

javascript - 使新关键字可选

javascript - 如何将字符串转换为 JScript 对象数组