具有字符串类型的单个元素的数组"神奇地"变成字符串

时间:2017-08-08 03:58:58

标签: javascript arrays function types

不确定为什么会这样。在我的代码中,这些数组可能只有一个元素。

actualAnswer = actualAnswer.split(" ");
playerAnswer = playerAnswer.split(" ");

然后我将它们传递给这个函数。

     function checkForPlural(playerAnswer, actualAnswer){

var answerObject = {playerAnswer: playerAnswer,
                    actualAnswer: actualAnswer};

for (var answerWord in actualAnswer){
    if (actualAnswer[answerWord].slice(-1) == "S")
    {
            answerObject.actualAnswer[answerWord] = actualAnswer[answerWord].substring(0, actualAnswer[answerWord].length - 1);
    }
}
for (var answerWord in playerAnswer){
    if (playerAnswer[answerWord].slice(-1) == "S")
    {
            answerObject.playerAnswer[answerWord] = playerAnswer[answerWord].substring(0, playerAnswer[answerWord].length - 1);
    }
}
}

当我返回对象时,如果传入的数组只有一个元素,则javascript决定将它们解释为字符串,所以如果我使用answerObject.actualAnswer.length它会给我一个长度字符串,而不仅仅是1。

不幸的是,这是一个掠夺者/幸运的是它似乎按照预期在那里工作,所以我很困惑: https://plnkr.co/edit/nIqq3VdjjMa2GDWyqkxx

编辑:问题是在我的代码中的早期联结,对不起!

2 个答案:

答案 0 :(得分:0)

您可以使用Array.prototype.map()返回一个新数组String.prototype.replace(),如果存在,则替换字符串中的结束"S"字符,返回一个属性设置为函数参数的对象标识符

const regexp = /S$/;
const re = "";

function parseAnswer(arr, regexp_, re_) {
  return arr.map(function(prop) {return prop.replace(regexp_, re_)})
}

function checkForPlural(playerAnswer, actualAnswer) {
  return {
    playerAnswer: parseAnswer(playerAnswer, regexp, re),
    actualAnswer: parseAnswer(actualAnswer, regexp, re)
  }
}

console.log(checkForPlural("abc defS ghi".split(" "), "12S 456 78S".split(" ")))

答案 1 :(得分:0)

有问题的代码工作正常,"魔法"转换是因为另一个用字符串覆盖数组的函数出错。我的坏。