Преобразование строки в массиве объектов в массив чисел

0

У меня есть массив объектов с некоторыми свойствами в виде строковых значений, может кто-то поможет мне получить массив чисел из него. Вот массив выглядит.

  scores = [
               {
                  maxScore:"100"
                  obtainedScore:"79"
                  passed:"pass"
                  subject:"Maths"
               },
               {
                  maxScore:"100"
                  obtainedScore:"73"
                  passed:"pass"
                  subject:"Science"
               },
               {
                  maxScore:"100"
                  obtainedScore:"82"
                  passed:"pass"
                  subject:"English"
               }
           ]

я хочу, чтобы полученныеScore и maxScore должны быть выведены из этих объектов и помещены в два разных массива

я попробовал это

for (var  i =0 ; i < score.length; i++)
{ 
   var marks[i] = parseInt(score[i].obtainedScore) ;
} 

и я нашел NaN.

  • 3
    Поскольку это довольно простая итерация массива объектов, мне интересно, какой код вы пробовали.
  • 0
    я попробовал это для (var i = 0; i <score.length; i ++) {var marks [i] = parseInt (score [i] .obtainedScore;)} и нашел NaN.
Показать ещё 3 комментария

4 ответа

1
  1. ПРАВИЛЬНЫЙ ОТВЕТ НА ОСНОВЕ ВАШЕГО ПОПЫТКА:

        var scores = [{
          maxScore: "100",
          obtainedScore: "79",
          passed: "pass",
          subject: "Maths"
        }, {
          maxScore: "100",
          obtainedScore: "73",
          passed: "pass",
          subject: "Science"
        }, {
          maxScore: "100",
          obtainedScore: "82",
          passed: "pass",
          subject: "English"
        }]
        var marks = [];
        for (var i = 0; i < scores.length; i++) {
          marks[i] = parseInt(scores[i].obtainedScore, 10);
        }
        console.log(marks)
  2. МОЙ СОЛН (от того, как вы вступили в вашу попытку)

var scores = [{
      maxScore: "100",
      obtainedScore: "79",
      passed: "pass",
      subject: "Maths"
    }, {
      maxScore: "100",
      obtainedScore: "73",
      passed: "pass",
      subject: "Science"
    }, {
      maxScore: "100",
      obtainedScore: "82",
      passed: "pass",
      subject: "English"
    }]

    function decoupler(arr, prop) {
      return arr.map(function(item, index) {
        return parseInt(item[prop], 10);
      });
    }
    var arr1 = decoupler(scores, "maxScore");
    var arr2 = decoupler(scores, "obtainedScore");

    console.log(arr1);
    console.log(arr2);

Изменение: добавлен параметр radix для parseInt() на основе комментария jfriend00.

1

как насчет отображения проекции?

var maxScores = scores.map(score => parseInt(score.maxScore, 10))
var obtainedScores = scores.map(score => parseInt(score.obtainedScore, 10))
  • 2
    Вам нужно конвертировать из строки в число. Мне нравится общая простота подхода, хотя.
  • 0
    О Конечно. полностью упустил это из виду. если мы предположим, что строка представляет число, то этого должно быть достаточно для добавления 'parseInt'
Показать ещё 2 комментария
0

Я не уверен на 100%, что вы хотите, но результат:

я хочу, чтобы полученныеScore и maxScore должны быть выведены из этих объектов и помещены в два разных массива

var arrScore = [],
        arrMax = [];

    scores.forEach(i => {
        arrScore.push(!isNaN(parseInt(i.obtainedScore)) ? parseInt(i.obtainedScore) : 0);
        arrMax.push(!isNaN(parseInt(i.maxScore)) ? parseInt(i.maxScore) : 0);
    });

В основном это создает две массивы arrScore которые будут содержать каждое отдельное значение оценки и arrMax который содержит массив максимальных оценок.

Используя forEach мы перебираем массив и вставляем значения в соответствующие массивы. Примечание. Для этого мы также гарантируем, что тип является действительным целым числом.

0

scores = [
               {
                  maxScore:"100",
                  obtainedScore:"79",
                  passed:"pass",
                  subject:"Maths"
               },
               {
                  maxScore:"100",
                  obtainedScore:"73",
                  passed:"pass",
                  subject:"Science"
               },
               {
                  maxScore:"100",
                  obtainedScore:"82",
                  passed:"pass",
                  subject:"English"
               }
           ];
           maxScoreArray = new Array();
           obtainedScoreArray = new Array();

           for (var i = scores.length - 1; i >= 0; i--) {
           	maxScoreArray.push(Number(scores[i].maxScore));
           	obtainedScoreArray.push(Number(scores[i].obtainedScore));
           }

           console.log(maxScoreArray);
           console.log(obtainedScoreArray);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню