【发布时间】:2021-12-25 01:45:19
【问题描述】:
我有一个来自 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 和 Object assign 来做这个,就像这样
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', 'radishes', 'yellow', 'red' ]。但是,也许正如预期的那样,这些值被覆盖了,我最终得到:
{
animal: {
horse : radishes
},
fruit: {
apple : red
}
}
第一个值在分配中不存在。有谁知道如何完成这项工作?
谢谢!
【问题讨论】:
-
你能设计一个更好的数据结构吗?例如
{ type: 'animal', name: 'monkey', food: 'banana' }。可能会让事情变得更容易。 -
如果数据中有不止一只猴子,您将面临您想要获得的结构的数据丢失。
-
谢谢大家;数据中没有其他猴子,所以我不担心数据丢失(我之前遇到过,所以取出了其他猴子)。安迪,你的建议是有道理的,但是数据来自一个 serializeArray 调用,它只给了我表单的名称和值;现在,动物和马被编码为“animal_horse”作为名称,而值是“萝卜”。
标签: javascript arrays javascript-objects