不确定为什么会发生这种情况。此时,在我的代码中,这些数组可能只有一个元素。
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
编辑:这个问题出现在我的代码的前面的交叉点,抱歉!
发布于 2017-08-08 12:32:56
您可以使用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(" ")))
发布于 2017-08-08 13:04:25
有问题的代码工作正常,“魔术”转换是由于另一个函数中的错误,该函数用字符串覆盖数组。是我的错。
https://stackoverflow.com/questions/45559052
复制相似问题