如何从阵列中获得独特的年份?

时间:2019-01-03 16:31:14

标签: javascript

我有一个日期范围在三年之间的数组。如何从中获得独特的岁月?我已经尝试过了,但是它会将所有项目推送到新数组中。

let array = [
  { x: Mon Feb 01 2016 , y:  32 }
  { x: Mon Feb 01 2016 , y:  95 }
  { x: Mon Feb 01 2017 , y: 117 }
  { x: Mon Feb 01 2018 , y:  23 }
  { x: Mon Feb 01 2018 , y:  14 }
]

let sortedArray = []

for (let i = 0; i < array.length; i++) {
  const obj = dates[i]
  sortedArray.push(obj.x.getFullYear())

}

5 个答案:

答案 0 :(得分:3)

您可以绘制年份并从Set中获取唯一值。

如有必要,添加排序。

unique.sort((a, b) => a - b); // asc

var array = [{ x: 'Mon Feb 01 2016', y:  32 }, { x: 'Mon Feb 01 2016' , y:  95 }, { x: 'Mon Feb 01 2017' , y: 117 }, { x: 'Mon Feb 01 2018' , y:  23 }, { x: 'Mon Feb 01 2018' , y:  14 }],
    unique = Array.from(new Set(array.map(({ x }) => new Date(x).getFullYear())));

console.log(unique);

答案 1 :(得分:1)

您可以映射项目以获取x字段的第四个标记(用空格分隔)并将这些值放入集合中。您可以使用传播运算符将值转换为数组,然后进行排序以进行安全度量。

let array = [
  { x: 'Mon Feb 01 2016' , y:  32 },
  { x: 'Mon Feb 01 2016' , y:  95 },
  { x: 'Mon Feb 01 2017' , y: 117 },
  { x: 'Mon Feb 01 2018' , y:  23 },
  { x: 'Mon Feb 01 2018' , y:  14 }
]
let uniqueYears = [...new Set(array.map(item => item.x.split(' ')[3]))].sort();

console.log(uniqueYears);
.as-console-wrapper { top:0; max-height: 100% !important; }

答案 2 :(得分:1)

我认为您已经匆忙粘贴了代码。永远不要这样做,因为这会使其他开发人员快速理解和回答。我已经对其进行了一点编辑,并使其按如下方式工作。

let array = [
    { x: "Mon Feb 01 2016" , y:  32 },
    { x: "Mon Feb 01 2016" , y:  95 },
    { x: "Mon Feb 01 2017" , y: 117 },
    { x: "Mon Feb 01 2018" , y:  23 },
    { x: "Mon Feb 01 2018" , y:  14 }
];

let sortedArray = [];

for (let i = 0; i < array.length; i++) {
    let obj = array[i];
    let year = (new Date(obj.x)).getFullYear();

    if(!(sortedArray.indexOf(year) > -1)) {
        sortedArray.push(year); // Pushing year which does not exist in array
    }
}

console.log(sortedArray); // [ 2016, 2017, 2018 ]

答案 3 :(得分:0)

您可以做到

let array=[

{x: 'Mon Feb 01 2016' , y: 32},
{x: 'Mon Feb 01 2016' , y: 95},
{x: 'Mon Feb 01 2017' , y: 117},
{x: 'Mon Feb 01 2018' , y: 23},
{x: 'Mon Feb 01 2018' , y: 14},
];

let sortedArray = [];
let unique = [];
 for (let i = 0; i < array.length; i++) {
  const obj = array[i];
  var date = new Date(obj.x);
  if(!unique[date.getFullYear()]){
   sortedArray.push(date.getFullYear());
   unique[date.getFullYear()] = true;
  }

}

答案 4 :(得分:0)

您还可以结合使用mapfilterindexOf

var array = [{ x: 'Mon Feb 01 2016', y:  32 }, { x: 'Mon Feb 01 2016' , y:  95 }, { x: 'Mon Feb 01 2017' , y: 117 }, { x: 'Mon Feb 01 2018' , y:  23 }, { x: 'Mon Feb 01 2018' , y:  14 }]
var unique = array
          .map( yearDate => new Date(yearDate.x).getFullYear())
          .filter( (year, index, arr) => arr.indexOf(year) === index ) 
console.log(unique) // [2016, 2017, 2018]