从javascript中的JSON对象创建唯一月份数组(不带for循环)
我正在学习javascript中的d3,并且正在做一些基本的数据操作。我有一个简单的年/月/出生数据JSON对象,如下所示:从javascript中的JSON对象创建唯一月份数组(不带for循环),javascript,data-manipulation,Javascript,Data Manipulation,我正在学习javascript中的d3,并且正在做一些基本的数据操作。我有一个简单的年/月/出生数据JSON对象,如下所示: var birthData = [ { "year": 1967, "month": "January", "births": 31502 }, { "year": 1967, "month": "January", "births": 26703 }, { "year": 19
var birthData = [
{
"year": 1967,
"month": "January",
"births": 31502
},
{
"year": 1967,
"month": "January",
"births": 26703
},
{
"year": 1967,
"month": "February",
"births": 28853
},
{
"year": 1967,
"month": "February",
"births": 26958
},
{
"year": 1967,
"month": "February",
"births": 28591
},
{
"year": 1967,
"month": "March",
"births": 29545
},
{
"year": 1967,
"month": "March",
"births": 30086
}]
["January", "February", "March"]
我想简单地制作一个JSON对象中出现的独特月份数组,如下所示:
var birthData = [
{
"year": 1967,
"month": "January",
"births": 31502
},
{
"year": 1967,
"month": "January",
"births": 26703
},
{
"year": 1967,
"month": "February",
"births": 28853
},
{
"year": 1967,
"month": "February",
"births": 26958
},
{
"year": 1967,
"month": "February",
"births": 28591
},
{
"year": 1967,
"month": "March",
"births": 29545
},
{
"year": 1967,
"month": "March",
"births": 30086
}]
["January", "February", "March"]
我宁愿避免使用这种方法
var months = [];
for(var i = 0; i <= birthData.length; i++) {
var month = birthData[i].month
if(months.indexOf(month) === -1) {
months.push(month)
}
}
var月数=[];
对于(var i=0;i而言,使用reduce
是一种简洁的方法:
var months = birthData.reduce((accumulator, item) =>
accumulator.includes(item.month)
? accumulator
: [ ...accumulator, item.month ], []);
它的作用是在构建新数组(累加器
)时循环所有项目,并在检查是否已将月份添加到此新数组的条件下,确定是否应将当前项目的月份添加到数组中
上述代码使用ES2015语法,以下是等效的ES5语法:
var months = birthData.reduce(function(accumulator, item) {
return accumulator.indexOf(item.month) > -1
? accumulator
: accumulator.concat(item.month);
}, []);
使用reduce
是一种简洁的方法:
var months = birthData.reduce((accumulator, item) =>
accumulator.includes(item.month)
? accumulator
: [ ...accumulator, item.month ], []);
它的作用是在构建新数组(累加器
)时循环所有项目,并在检查是否已将月份添加到此新数组的条件下,确定是否应将当前项目的月份添加到数组中
上述代码使用ES2015语法,以下是等效的ES5语法:
var months = birthData.reduce(function(accumulator, item) {
return accumulator.indexOf(item.month) > -1
? accumulator
: accumulator.concat(item.month);
}, []);
您可以将月份映射回一个新数组,然后使用一个只保存唯一值的集合,使数组唯一,而无需自己迭代
var months = [...new Set(birthData.map(i => i.month))]
var birthData=[{
“年份”:1967年,
“月”:“一月”,
“出生”:31502
},
{
“年份”:1967年,
“月”:“一月”,
“出生”:26703
},
{
“年份”:1967年,
“月”:“二月”,
“出生”:28853
},
{
“年份”:1967年,
“月”:“二月”,
“出生”:26958
},
{
“年份”:1967年,
“月”:“二月”,
“出生”:28591
},
{
“年份”:1967年,
“月”:“三月”,
“出生”:29545
},
{
“年份”:1967年,
“月”:“三月”,
“出生”:30086
}
]
var months=[…新集合(birthData.map(i=>i.month))]
log(months)
您可以将月份映射回一个新数组,然后使用一个只保存唯一值的集合,使数组唯一,而无需自己迭代
var months = [...new Set(birthData.map(i => i.month))]
var birthData=[{
“年份”:1967年,
“月”:“一月”,
“出生”:31502
},
{
“年份”:1967年,
“月”:“一月”,
“出生”:26703
},
{
“年份”:1967年,
“月”:“二月”,
“出生”:28853
},
{
“年份”:1967年,
“月”:“二月”,
“出生”:26958
},
{
“年份”:1967年,
“月”:“二月”,
“出生”:28591
},
{
“年份”:1967年,
“月”:“三月”,
“出生”:29545
},
{
“年份”:1967年,
“月”:“三月”,
“出生”:30086
}
]
var months=[…新集合(birthData.map(i=>i.month))]
console.log(月)
此问题不需要D3的可能重复。您可以使用内置于JS中的数组方法来完成此问题。此问题不需要D3的可能重复。您可以使用内置于JS中的数组方法来完成此问题。接受此答案是因为我喜欢巧妙地使用集合,因为它只包含唯一的值,并且它是一个1-lineracepted th答案是因为我喜欢巧妙地使用集合,因为它只保存唯一的值,而且是一个1行