JS 无法从数组中填充数组
Posted
技术标签:
【中文标题】JS 无法从数组中填充数组【英文标题】:JS failing to populate arrays from array 【发布时间】:2018-04-04 23:57:17 【问题描述】:我有一系列考试成绩,其中包含考试日期和成绩。我想将所有成绩放在一个数组中,将日期放在另一个数组中,以便可以在 chart.js 应用程序中绘制它们。我怎样才能把它们分开?
结果数组示例布局:
Results
[0] examDate: "2017-10-16T10:30:00", <ResultEntry>grade: A
[1] examDate: "2017-15-16T11:00:00", <ResultEntry>grade: C
[2] examDate: "2017-16-16T11:30:00", <ResultEntry>grade: B
[3]examDate: "2017-20-16T12:00:00", <ResultEntry>grade: B
但我尝试的并没有填充两个新数组
var dateArray;
var gradeArray;
var counter = 0;
for (members in results)
dateArray[counter] = members[0];
gradeArray[counter] = members[1];
counter++;//increment storage index
我的项目中安装了 Jquery,可以使用 .each
功能来实现此目的吗?
【问题讨论】:
试试dateArray[counter] = members.examDate
和dateArray[counter] = members.grade
【参考方案1】:
您可以通过传递一个回调函数来使用map
方法。
map()
方法使用在调用数组中的every
元素上调用提供的 函数(回调)的结果创建一个新数组。
let results=[examDate: "2017-10-16T10:30:00", grade: 'A',examDate: "2017-15-16T11:00:00", grade: 'C',examDate: "2017-16-16T11:30:00", grade: 'B',examDate: "2017-20-16T12:00:00", grade: 'B'];
let dates=results.map(function(a)
return a.examDate;
);
let grades=results.map(function(a)
return a.grade;
);
console.log(dates);
console.log(grades);
您也可以使用arrow
函数。
let grades=results.map(a => a.grade);
【讨论】:
【参考方案2】:您需要从数组元素中获取字段的值。检查这个:
var dateArray = [];
var gradeArray = [];
var counter = 0;
for (var member in results)
dateArray.push(member.examDate);
gradeArray.push(member.grade);
【讨论】:
【参考方案3】:如果results
是一个数组,那么在这一行
for (members in results)
members
基本上是索引值 0,1,..
所以members[0]
将是undefined
我的项目中安装了 Jquery,.each 功能可以是 用来实现这个的?
是的,但为什么不改用原生的forEach
var dateArray = [], gradeArray = [];
results.forEach( function( result )
dateArray.push( result.examDate );
gradeArray.push( result.grade );
);
【讨论】:
【参考方案4】:考虑到结果数组的形状如下:
let results = [
examDate: "2017-10-16T10:30:00", grade: 'A' ,
examDate: "2017-15-16T11:00:00", grade: 'C' ,
examDate: "2017-16-16T11:30:00", grade: 'B' ,
examDate: "2017-20-16T12:00:00", grade: 'B'
];
Array.prototype.map 非常适合此用途:
let dateArray = results.map(result => result.examDate);
let gradeArray = results.map(result => result.grade);
您还可以通过几种不同的方式循环元素:
let dateArray = [],
gradeArray = [];
for (let result of results)
dateArray.push(result.examDate);
gradeArray.push(result.grade);
还有一个和你类似的解决方案:
var dateArray = [],
gradeArray = [];
for (var i = 0; i < results.length; i++)
dateArray[i] = results[i].examDate;
gradeArray[i] = results[i].grade;
您也可以将它们推送到数组中,而不是将位置设置为值:
var dateArray = [],
gradeArray = [];
for (var i = 0; i < results.length; i++)
dateArray.push(results[i].examDate);
gradeArray.push(results[i].grade);
正如你提到的,使用 jQuery each:
var dateArray = [],
gradeArray = [];
$.each(results , function(i, value)
dateArray.push(value.examDate);
gradeArray.push(value.grade);
);
【讨论】:
以上是关于JS 无法从数组中填充数组的主要内容,如果未能解决你的问题,请参考以下文章