【问题标题】:Array with single element of type string "magically" turning into string具有字符串类型的单个元素的数组“神奇地”变成字符串
【发布时间】:2018-01-15 11:26:13
【问题描述】:

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

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

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

编辑:问题出在我的代码中较早的连接处,抱歉!

【问题讨论】:

  • 创建对象和使用for..in循环的目的是什么?您已将数组传递给函数?
  • @guest271314 我想我可以直接返回数组。我只是想我会把它们塞进一个对象中,然后出于……原因再次提取数组。我不确定这是不是疯了!无论哪种方式,我都会或一直在返回一个对象或多维数组,尽管没有?
  • 预期结果是什么?如果字符串中的最后一个字母是"S",则返回字符串直到最后一个"S"?
  • 预期的结果是有一个包含两个数组的对象。相反,如果传入的数组有一个元素,则返回的对象内部有两个字符串。
  • @KaranDesai 已添加到我的帖子中

标签: javascript arrays function types


【解决方案1】:

您可以使用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(" ")))

【讨论】:

    【解决方案2】:

    有问题的代码工作正常,“神奇”转换是因为另一个函数中的错误,该函数用字符串覆盖了数组。我的错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 2014-11-04
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多