js如何处理想要得到数据结构?

例1 var arr = [

    {
        date: "2018-11-27",
        time: "1:00、2:00",
    },
    {
        date: "2018-11-27",
        time: "3:00、4:00"
    },
    {
        date: "2018-01-10",
        time: "5:00"
    }
];

希望得到 [ { date: "2018-11-27", time: "1:00、2:00、3:00、4:00" }, { date: "2017-01-10", time: "5:00" } ]

例2

var arr1 = [{id: 1,name: '小明'}, {id: 2,name: '小强'}];
var arr2 = [{id: 1,age: 10}, {id: 2, age: 20}];
希望得到 [{id: 1, name: '小明', age: 10}, {id: 2,name: '小强', age: 20}]

能提供多种解决方案当然最好啦!

阅读 1.6k
2 个回答
js如何处理想要得到数据结构?

js无法处理想要的数据结构,只能按特定规则处理数据结构。

示例1中的"1:00、2:00、3:00、4:00"是同名属性字符串通过相加,而示例2中同名属性的结果却直接是'小明',所以你其实要一个什么样的特定规则

补充

示例1

var arr = [{
        date: "2018-11-27",
        time: "1:00、2:00",
    },
    {
        date: "2018-11-27",
        time: "3:00、4:00"
    },
    {
        date: "2018-01-10",
        time: "5:00"
    }
];

arr.reduce((res, acc) => {
    let i = res.findIndex(d => d.date === acc.date);
    if (i > -1) {
        res[i].time = [res[i].time, acc.time].join('、')
    } else {
        res.push(acc)
    }
    return res;
}, [])

示例2

let arr1 = [{ id: 1, name: '小明' }, { id: 2, name: '小强' }];
let arr2 = [{ id: 1, age: 10 }, { id: 2, age: 20 }];


function merge(arr1, arr2, key) {
    return arr1.map(d1 => {
        let same = arr2.find(d2 => d2[key] === d1[key]);
        return same ? Object.assign({}, d1, same) : d1
    })
}

merge(arr1, arr2, 'id')//[ { id: 1, name: '小明', age: 10 },{ id: 2, name: '小强', age: 20 } ]

如何处理?
一步一步根据你提供规则去处理 例1 循环如果date相同那么合并
第一个举个例子 只是思维你需要自己去练习...

    var arr = [{
            date: "2018-11-27",
            time: "1:00、2:00",
        },
        {
            date: "2018-11-27",
            time: "3:00、4:00"
        },
        {
            date: "2018-01-10",
            time: "5:00"
        }
    ];
    arr.map((e,i)=>{
        if(i < arr.length - 1 && e["date"] == arr[i+1]["date"]){
            arr[i+1]["time"] = e["time"] + "、" +arr[i+1]["time"] ;
            arr.splice(i,1);
        } 
    })
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题