我有一个日期范围在三年之间的数组。如何从中获得独特的岁月?我已经尝试过了,但是它会将所有项目推送到新数组中。
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())
}
答案 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)
您还可以结合使用map
,filter
和indexOf
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]