三个字符串怎么合成一个数组

有没有什么比较简便的处理方式,把对象合成下面的数组格式

let obj = {
    name: 'apple, pear, milk',
    color: 'red, yellow, white',
    num: '2 ,3, 4'
}
[
  {
    name: 'apple',
    color: 'red',
    num: '2'
  },
  {
    name: 'pear',
    color: 'yellow',
    num: '3'
  },
    {
    name: 'milk',
    color: 'white',
    num: '4'
  }
]
阅读 3.8k
5 个回答

{'apple', 'pear', 'milk'} 确定是这种数据结构?

这是我的答案


Array.from(
    Object.values(obj).reduce((max, value) => { // 先获取属性中能截断最长的那个数组,这样保证后面在匹配数据的时候是最完整的,你要是想保证数据的有效性,可以改成获取最短的那个value
       max =  value.length > max.length ? value : max;
       return max;
    }).split(','), (el,index) => Object.keys(obj).reduce((result, key) => {
        // 这个地方定义匹配规则, 按照你的描述目前是按照索引一一对应
        // 使用正则可以对全局的属性进行正则过滤
        // 如果要对单个key值比如name进行统一格式化处理,可以取上方的key值来做差异化处理
        result[key] = obj[key].split(',')[index].match(/\S*/);
        return  result;
    }, {})).filter((el) => {
        // 这个地方可以根据你想要筛选的条件来决定你到底需要什么样子的数据
    });
    

不知道别人怎么处理, 起码我把你的条件变成逻辑并且抛出所有能自由化配置的口子,比一个字段一个字段处理要舒服的多

let a=['apple', 'pear', 'milk']
let b=['red', 'yellow', 'white']
let c=['2', '3','4']
let d=[]
a.forEach((item,index)=>{
    d[index]={};
    d[index].name=a[index];
    d[index].color=b[index];
    d[index].num=c[index]
})
console.log(d)

抛砖引玉,思路是这样的,改进的方法也很多

抛砖引玉,注重理解

let obj = {
    name: "apple, pear, milk",
    color: "red, yellow, white",
    num: "2 ,3, 4"
};
//数据解析
let temp = Object.values({
    name: "apple  , pear,   milk",
    color: "red, yellow, white",
    num: "2 ,  3,  4"
}).map(item => item.split(/[(\s+,)|(,\s+)|,|(\s+,\s+)]/).filter(item => !!item));//这里这么写是为了防止字符串中“,”前后没有或有一个或多个空格
//数组旋转
let transferTemp = temp[0].map((col, i) => {
    return temp.map(row => {
        return row[i];
    });
});
//数据转化
let result = transferTemp.reduce((result, cur) => {
    result.push({
        name: cur[0],
        color: cur[1],
        num: cur[2]
    });
    return result;
}, []);
console.log(result);
Object.entries(obj).reduce((result,v)=>{
    v[1].split(/\s*,\s*/).forEach((value,index)=>{
        result[index]=Object.assign(result[index]||{},{[v[0]]:value})
    });
    return result;
},[]);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题