不确定为什么会这样。在我的代码中,这些数组可能只有一个元素。
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
编辑:问题是在我的代码中的早期联结,对不起!答案 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)
有问题的代码工作正常,"魔法"转换是因为另一个用字符串覆盖数组的函数出错。我的坏。