如何拆分字符串阵列,将字符串编号作为整数解析,然后将它们添加到for循环中


  1. 我有一系列字符串(以分数的形式编写的分数(,例如[40/60" 30/40&quot",...]。分数代表用户对问题的回答,数组是给定类别的所有回答。

  2. 我想将字符串拆分,每个分析到整数中,然后在for循环中添加每个左侧分数以获得用户的总类别得分,然后添加每个右侧分数以获得一个可能的最大得分。

我已经尝试了以下代码,并且正在返回NAN。

################
var scoreArray = ["45/60", "60/60", "40/40","30/40", "15/20", "30/40", "30/60", "20/40"];
var i;
var myCategoryScore;
var maxCategoryScore;
################
for(i=0; i < scoreArray.length;i++){
    var splitScore = scoreArray[i].split("/");
    console.log(splitScore);
    myQuestionScore = parseInt(splitScore[0], 10);
    myCategoryScore = myCategoryScore + myQuestionScore;
    console.log(myCategoryScore);
    maxQuestionScore = parseInt(splitScore[1]);
    maxCategoryScore = maxCategoryScore + maxQuestionScore; 
    console.log(maxCategoryScore);
}

结果是:

array [45&quot;&quot'60']

nan

nan

array [60&quot'60']

nan

nan

array [40&quot" 40"

nan

nan

etc

但是,当自己打印出解析的整数时,它已经正确解析了...

for(i=0; i<scoreArray.length;i++){
   var splitScore = scoreArray[i].split("/");
   console.log(splitScore);
   myQuestionScore = parseInt(splitScore[0], 10);
   console.log(myQuestionScore);
   maxQuestionScore = parseInt(splitScore[1]);
   console.log(maxQuestionScore);
}

这导致..

array [45&quot;&quot'60']

45

60

array [60&quot'60']

60

60

array [40&quot" 40"

40

40

等...

那么,为什么我不能将总计添加在一起呢?我如何解决它?是由于范围吗?

谢谢!

myCategoryScore永远不会初始化。

myCategoryScore = myCategoryScore + myQuestionScore;将提供undefined + 42 //NaN

maxCategoryScore

相同

如何重现错误:

var UndefinedValue;
console.log(UndefinedValue);
console.log(UndefinedValue + 42);

初始化变量,因此您可以在数学操作中使用它们:

var scoreArray = ["45/60", "60/60", "40/40","30/40", "15/20", "30/40", "30/60", "20/40"];
var i;
// initialize this one
var myCategoryScore = 0;
// and this one
var maxCategoryScore = 0;
for(i=0; i < scoreArray.length;i++){
    var splitScore = scoreArray[i].split("/");
    console.log(splitScore);
    myQuestionScore = parseInt(splitScore[0], 10);
    myCategoryScore = myCategoryScore + myQuestionScore;
    console.log(myCategoryScore);
    maxQuestionScore = parseInt(splitScore[1]);
    maxCategoryScore = maxCategoryScore + maxQuestionScore; 
    console.log(maxCategoryScore);
}

我认为.dreduce函数在这里是一个不错的选择:(

var scoreArray = ["45/60", "60/60", "40/40","30/40", "15/20", "30/40", "30/60", "20/40"];
var scoreArrayParsed = scoreArray.reduce((acc, e) => {
    let arr = e.split('/');
    acc.min += parseInt(arr[0]);
    acc.max += parseInt(arr[1]);
    return acc;
}, {
    min: 0,
    max: 0
});
console.log(scoreArrayParsed);

如果您有可用的lodash,则可以使用_.zip

以凉爽(或令人作呕(的一行方式进行分裂步骤

创建了一个分组的元素,其中第一个包含给定数组的第一个元素,其中第二个包含给定数组的第二个元素,等等。

_.zip(['a', 'b'], [1, 2], [true, false]);
// => [['a', 1, true], ['b', 2, false]]

您可以尝试以下方法:

const _ = require('lodash');
const scoreArray = ["45/60", "60/60", "40/40","30/40", "15/20", "30/40", "30/60", "20/40"];
const sortedScores = _.zip(..._.map(scoreArray, s => s.split('/')));
// [ [ '45', '60', '40', '30', '15', '30', '30', '20' ],
//   [ '60', '60', '40', '40', '20', '40', '60', '40' ] ]

第一个数组具有第一个值,第二个井...具有第二个值!此后,您可以按照其他答案建议使用reduce。lodash还提供了_.sum功能,您可以用来节省一些开销:(

最新更新