Javascript 如何在React JS中组合具有相同日期的数组

Javascript 如何在React JS中组合具有相同日期的数组,javascript,reactjs,redux,frontend,Javascript,Reactjs,Redux,Frontend,我有一个数组: data = [ {date: 4/15/2020, 9:46:07 PM, value: "abc"}, {date: 4/15/2020, 11:19:18 PM, value: "xyz"}, {date: 4/16/2020, 1:25:13 PM, value: "def"}, {date: 4/17/2020, 5:6:17 PM, value: "pqr"} ]; 我必须比较日期对象并合并数组 因

我有一个数组:

data = [ {date: 4/15/2020, 9:46:07 PM, value: "abc"},
         {date: 4/15/2020, 11:19:18 PM, value: "xyz"},
         {date: 4/16/2020, 1:25:13 PM, value: "def"},
         {date: 4/17/2020, 5:6:17 PM, value: "pqr"}
       ];
我必须比较日期对象并合并数组

因此,预期输出如下所示:

 data = [ {date: 4/15/2020, value: ["abc", "xyz"]},
         {date: 4/16/2020, value: ["def"]},
         {date: 4/17/2020, value: ["pqr"]}
       ];
我怎样才能做到这一点

提前谢谢

我的方法:

   data = [ {date: 4/15/2020, 9:46:07 PM, value: "abc"},
             {date: 4/15/2020, 11:19:18 PM, value: "xyz"},
             {date: 4/16/2020, 1:25:13 PM, value: "def"},
             {date: 4/17/2020, 5:6:17 PM, value: "pqr"}
           ];

    // Create a map for the dates
    let dataMap = {};
    data.forEach((el) => {
      let tempDate = getDateFormat(el.date);
      if (tempDate in dateMap) {
        dateMap[tempDate].value.push(el.value);
      } else {
        dateMap[tempDate] = {
          date: tempDate,
          value: [el.value],
        };
      }
    });
    data = [];

   // Fill the data
    Object.keys(dataMap).forEach((el) => data.push(dataMap[el]));

   // The format of date
    function getDateFormat(date) {
      return (
        date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear()
      );
    }
const res=[]
for(设i=0;ir.date!==data[i].date)){
res.push(数据[i])
}否则{
const index=res.findIndex(r=>r.date==data[i].date)
res[index]={…res[index],值:[res[index]。值,数据[i]。值]}
}
}
console.log(res)

它只在数据中只有一个值时工作。使用
reduce
值非常方便

const数据=[
{日期:“2020年4月15日,晚上9:46:07”,数值:“abc”},
{日期:“2020年4月15日,晚上11:19:18”,值:“xyz”},
{日期:“2020年4月16日,下午1:25:13”,值:“def”},
{日期:“2020年4月17日,下午5:6:17”,数值:“pqr”}
]
const newArray=data.reduce((acc,dt)=>{
施工日期=新日期(日期)
const y=new Intl.DateTimeFormat('en',{year:'numeric'})。格式(日期)
const m=new Intl.DateTimeFormat('en',{month:'numeric'})。格式(日期)
const d=new Intl.DateTimeFormat('en',{day:'2位'})。格式(日期)
const formattedate=`${m}/${d}/${y}`
const dateAcc=acc[格式化日期]
如果(!dateAcc){
acc[格式化日期]={
日期:年月日,
值:[dt.值]
}
}否则{
acc[FormattedDate].value.push(dt.value)
}
返回acc
}, {})

console.log(newArray)
日期值的类型是什么?日期类型是一个对象。
const res = []

for (let i = 0; i < data.length; i++) {
  if (res.every(r => r.date !== data[i].date)) {
    res.push(data[i])
  } else {
    const index = res.findIndex(r => r.date == data[i].date)
    res[index] = {...res[index], value: [res[index].value, data[i].value]}
  }
}

console.log(res)