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.examDatedateArray[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 无法从数组中填充数组的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITableView 不从数组中填充

无法将json数组填充到数组列表android开发

从使用 SwiftyJSON 的函数返回填充数组

在从 jQuery 到 JS 的转换中,数组填充了字符串而不是数字

在C#中填充一个数组[重复]

无法填充嵌套数组