JavaScript中如何提取数组元素并转换为指定结构的对象
数组转分组对象的实现方案
输入示例
let a = ['monkey: animal','John:human', 'Rob:human', 'donkey:animal']
期望输出
const output = { animal: ['monkey', 'donkey'], human: ['John', 'Rob'] }
实现方法
方法一:使用Array.reduce(推荐)
reduce是处理这类分组问题最简洁的方式,通过遍历数组逐步构建目标对象:
const result = a.reduce((acc, item) => { // 分割字符串并去除前后空格,兼容冒号前后的空格差异 const [name, category] = item.split(':').map(str => str.trim()); // 若当前类别未初始化,创建空数组 acc[category] = acc[category] || []; // 将名称推入对应类别的数组 acc[category].push(name); return acc; }, {}); console.log(result); // 输出符合预期的分组对象
方法二:使用Array.forEach(直观易懂)
如果对reduce不太熟悉,用forEach遍历构建对象的逻辑更直白:
const result = {}; a.forEach(item => { const [name, category] = item.split(':').map(str => str.trim()); // 检查类别是否存在,不存在则初始化数组 if (!result[category]) { result[category] = []; } result[category].push(name); }); console.log(result);
关键注意点
- 处理字符串分割时的空格:部分元素(如
monkey: animal)冒号后有空格,通过trim()统一去除前后空白,避免出现' animal'这类错误的键名。 - 数组初始化:每次处理前检查类别对应的数组是否存在,不存在则创建空数组,避免
push时报错。
内容的提问来源于stack exchange,提问作者Saurav
相关产品推荐
相关产品推荐

