JS无法从数组填充数组

时间:2017-10-24 09:00:43

标签: javascript jquery arrays foreach

我有一系列考试成绩,它包含考试的日期和成绩。我想将所有等级放在一个数组中,将日期放在另一个数组中,这样我就可以在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功能实现此目的?

4 个答案:

答案 0 :(得分:3)

您可以通过传递回调功能来使用map方法。

map()方法创建一个新数组,其结果是在调用数组中的every元素上调用提供的函数(回调)。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

您也可以使用arrow个功能。

 let grades=results.map(a => a.grade);

答案 1 :(得分:0)

您需要从数组元素中获取字段的值。检查一下:

% cat json_text.txt | tr -d '[:space:]'

答案 2 :(得分:0)

如果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 );
});

答案 3 :(得分:0)

考虑到结果数组具有以下形状:

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 每个

var dateArray = [],
    gradeArray = [];

$.each(results , function(i, value) {
    dateArray.push(value.examDate);
    gradeArray.push(value.grade);
});