【问题标题】:JS failing to populate arrays from arrayJS 无法从数组中填充数组
【发布时间】: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

标签: javascript jquery arrays foreach


【解决方案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);
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-08
          • 2018-07-05
          • 2015-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多