【问题标题】:Javascript : Construct array from an array with duplicate elements by property [duplicate]Javascript:通过属性从具有重复元素的数组构造数组[重复]
【发布时间】:2018-08-08 17:24:26
【问题描述】:

我有一个对象数组,我想通过删除基于数组属性的重复元素将其转换为具有不同结构的新数组。 例如,这个数组会被日期属性过滤:

var arrayWithDuplicates = [
   {
       "date":"02/08/2018", 
       "startTime": "09:00",
       "endTime": "12:00"
  },
  {
       "date":"02/08/2018", 
       "startTime": "14:00",
       "endTime": "17:00"
  }
];

==> 会变成:

  var newArray = [
  {
      "date":"02/08/2018", 
      "times": [
       {
           "startTime": "09:00",
            "endTime": "12:00"
       }, {
            "startTime": "14:00",
            "endTime": "17:00"
       }
       ]             
 ];

那么,我如何使用 js(ES5) 或 angularjs 来做到这一点

【问题讨论】:

标签: javascript arrays


【解决方案1】:

您可以使用数组reduce,findIndex.findIndex 将用于检查是否存在日期,如果存在则返回索引。使用此索引在新数组中查找元素,然后更新 times 数组

var arrayWithDuplicates = [{
    "date": "02/08/2018",
    "startTime": "09:00",
    "endTime": "12:00"
  },
  {
    "date": "02/08/2018",
    "startTime": "14:00",
    "endTime": "17:00"
  }
];
let newArray = arrayWithDuplicates.reduce(function(acc,curr){
   let checkIfExist = acc.findIndex(function(item){
       return item.date === curr.date
   });
  if(checkIfExist ===-1){
   let obj = {};
   obj.date = curr.date;
   obj.times = [{
    startTime:curr.startTime,
    endTime:curr.endTime
   }]
    acc.push(obj);
  }
  else{
   acc[checkIfExist].times.push({
    startTime:curr.startTime,
    endTime:curr.endTime
   })
  
  }
  return acc;
},[]);

console.log(newArray)

【讨论】:

  • 感谢您的回答,它正在工作:)
猜你喜欢
  • 2011-06-29
  • 2014-01-24
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
相关资源
最近更新 更多