javascript - 将数组中的对象映射到单个对象的最佳方法
问题描述
我正在尝试将基于类型的答案属性映射到新的单个对象
const questionsArray = [
{
question: `What is your name?`,
type: "name"
},
{
question: `What is your age?`,
type: "age"
}
]
这将导致:
bday = {
name: 'Jose',
age: '23',
}
这将不起作用,因为每个问题都将替换已设置的先前值,因为类型会有所不同
解决方案
您可以使用reduce()
和type
用作该键的键和answer
值
const questionsArray = [ { id: 0, question: `What is your name?`, answer: 'jose', type: "name" }, { id: 1, question: `What is your birth month?`, answer: 'January', type: "month" }, { id: 2, question: `What day in were you born?`, answer: '24', type: "day" }, { id: 3, question: `What's your email?`, answer: 'k@k.gmail.com', type: 'email' }]
const res = questionsArray.reduce((ac, {type, answer}) => {
ac[type] = answer;
return ac;
}, {});
console.log(res)
type
正如您将在上述方式中注意到的那样,除了数组值的属性之外,您不能使用任何其他键。
如果您想在结果对象中使用自定义属性名称,您需要有一个哈希表。
const questionsArray = [ { id: 0, question: `What is your name?`, answer: 'jose', type: "name" }, { id: 1, question: `What is your birth month?`, answer: 'January', type: "month" }, { id: 2, question: `What day in were you born?`, answer: '24', type: "day" }, { id: 3, question: `What's your email?`, answer: 'k@k.gmail.com', type: 'email' }]
const table = {
day: 'birthDay',
month: 'birthMonth'
}
const res = questionsArray.reduce((ac, {type, answer}) => {
ac[table[type] || type] = answer;
return ac;
}, {});
console.log(res)
推荐阅读
- xamarin.forms - MvvmCross MvxAsyncCommand CanExecute 不禁用/启用附加按钮
- sql - 如何为 5500 万条记录批量更新 postgres 中的单个列
- android - EditText 色调线颜色在夜间模式下不改变
- makefile - cmake 支持旧版 makefile 定义
- python - 在 numpy 中编写自定义归约函数
- typescript - Vue 3中@Options与class-component的含义是什么?
- firebase - React 原生 Firebase Facebook 登录 该字段必须为 28 个字符长
- c# - 使用 xpath 访问具有命名空间的子节点
- powershell - Cmd - 使用命令行在子文件夹中创建文件的最简单方法
- html - hc off canvas 合并双菜单