【问题标题】:How can I know how many data that have a different day or date in array object我如何知道数组对象中有多少具有不同日期或日期的数据
【发布时间】:2020-06-30 02:08:35
【问题描述】:

大家好!
在这种情况下,我在array 中有数据object,每个数据都有一个Unix Time 或日期,我想计算有多少数据具有不同的日期或日期,目标是取平均值每天、每周、每月和每年的收入。

您可以在下面看到我的代码,我有 9 个数据和 4 个不同的日期或日期,这意味着我有 4 个具有不同日期的数据计数,但是如何动态获取?对不起我的英语

let MyData = [
  {
    date: 1592918643305,
    name: 'Alex'
  },
  {
    date: 1592921952307,
    name: 'Simon'
  },
  {
    date: 1592927378630,
    name: 'Fory'
  },
  {
    date: 1592987102694,
    name: 'John'
  },
  {
    date: 1592987102694,
    name: 'Erwin'
  },
  {
    date: 1593422810672,
    name: 'Muller'
  },
  {
    date: 1593424811785,
    name: 'Thomas'
  },
  {
    date: 1593478227245,
    name: 'Max'
  },
  {
    date: 1593478293013,
    name: 'Tom'
  }
];

function convertToRegularDate(unix) {
  let regularDate = new Date(unix);
  let year = regularDate.getFullYear();
  let month = regularDate.getMonth();
  let date = regularDate.getDate();
  return 'Date: ' + date + '/' + month + '/' + year;
}

MyData.forEach(function (item) {
  console.log('Name: ' + item.name + ' ' +
  convertToRegularDate(item.date)
  );
});

【问题讨论】:

  • 你想避免redundant对象与date相同吗?

标签: javascript arrays json object filter


【解决方案1】:

您可以通过推送从您编写的函数中处理的日期字符串来创建一个数组来存储唯一日期。这些日期字符串将成为您比较它们是否唯一的方式。因此,在 for-each 中处理完所有数据之后,您就可以得到数组的长度。

let MyData = [
  {
    date: 1592918643305,
    name: 'Alex'
  },
  {
    date: 1592921952307,
    name: 'Simon'
  },
  {
    date: 1592927378630,
    name: 'Fory'
  },
  {
    date: 1592987102694,
    name: 'John'
  },
  {
    date: 1592987102694,
    name: 'Erwin'
  },
  {
    date: 1593422810672,
    name: 'Muller'
  },
  {
    date: 1593424811785,
    name: 'Thomas'
  },
  {
    date: 1593478227245,
    name: 'Max'
  },
  {
    date: 1593478293013,
    name: 'Tom'
  }
];

function convertToRegularDate(unix) {
  let regularDate = new Date(unix);
  let year = regularDate.getFullYear();
  let month = regularDate.getMonth();
  let date = regularDate.getDate();
  return 'Date: ' + date + '/' + month + '/' + year;
}

let uniqueDates = [];
MyData.forEach(function (item) {
  let dateString = convertToRegularDate(item.date);
  if (!uniqueDates.includes(dateString)){
    uniqueDates.push(dateString);
  }
  console.log('Name: ' + item.name + ' ' + dateString);
});
console.log('Unique Date: ' + uniqueDates.length);

【讨论】:

【解决方案2】:

let MyData = [
  {
    date: 1592918643305,
    name: 'Alex'
  },
  {
    date: 1592921952307,
    name: 'Simon'
  },
  {
    date: 1592927378630,
    name: 'Fory'
  },
  {
    date: 1592987102694,
    name: 'John'
  },
  {
    date: 1592987102694,
    name: 'Erwin'
  },
  {
    date: 1593422810672,
    name: 'Muller'
  },
  {
    date: 1593424811785,
    name: 'Thomas'
  },
  {
    date: 1593478227245,
    name: 'Max'
  },
  {
    date: 1593478293013,
    name: 'Tom'
  }
];


function convertToRegularDate(unix) {
  let regularDate = new Date(unix);
  let year = regularDate.getFullYear();
  let month = regularDate.getMonth();
  let date = regularDate.getDate();
  return 'Date: ' + date + '/' + month + '/' + year;
}

MyData.forEach(function (item) {
  console.log('Name: ' + item.name + ' ' +
  convertToRegularDate(item.date)
  );
}); 


const getUniqDates = (data) => [...new Set(data.map(item => new Date(item.date).toLocaleDateString()))]
const uniqDates = getUniqDates(MyData)
console.log("You have " + uniqDates.length + " uniq dates  >> ", ...uniqDates )

【讨论】:

    【解决方案3】:

    您可以使用Set

    // Set is an object type that has unique values
    const set = new Set()
    
    // Iterate through your array
    for (let o of MyData) {
        set.add(o.date)
    }
    
    // convert to regular date
    set.forEach(unixDate => convertToRegularDate(unixDate))
    
    // print the count of data with different date
    console.log(set.size)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2021-09-21
      • 2019-05-23
      • 2018-01-26
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多