JavaScript中如何通过对象数组属性值映射生成目标对象
问题根因
你写的array.map(x => {[x.country]: false})语法不生效,是因为箭头函数的语法规则:当箭头函数直接跟大括号时,JS会把大括号识别为函数体的代码块边界,而非要返回的对象字面量。这种情况下[x.country]: false会被解析为非法语法,直接报错。
另外如果你的目标是生成适配复选框组的绑定值,map本身只会返回对象数组,也不符合{ 键名: false }的单对象结构需求。
可直接用的实现方案
如果你需要返回对象数组
给对象字面量外层包裹圆括号,强制JS将括号内内容识别为对象表达式,而非代码块:
// 运行后得到 [{ 中国: false }, { 美国: false }, ...] 结构的数组 const objArr = array.map(x => ({ [x.country]: false }))
如果你需要适配动态复选框组的单对象结构
复选框组通常需要的是所有国家名作为键、默认值为false的单个对象,直接用Object.fromEntries搭配map生成即可:
// 运行后得到 { "中国": false, "美国": false, ... } 结构,可直接绑定到复选框组的value属性 const checkboxDefaultValue = Object.fromEntries( array.map(item => [item.country, false]) )
如果需要兼容不支持Object.fromEntries的老旧环境,可以用reduce实现相同逻辑:
const checkboxDefaultValue = array.reduce((result, item) => { result[item.country] = false return result }, {})
内容的提问来源于stack exchange,提问作者Ketuf Wtf
相关产品推荐
相关产品推荐

