为什么我不能在javascript字符串中交换字符?

时间:2014-08-16 23:56:42

标签: javascript arrays

我正在尝试交换数组的第一个和最后一个字符。但是javascript不允许我交换。 我不想使用任何内置函数。

function swap(arr, first, last){
    var temp = arr[first];    
    arr[first] = arr[last];
    arr[last] = temp;
}

4 个答案:

答案 0 :(得分:13)

因为字符串是不可变的。

数组符号就是:符号,charAt方法的快捷方式。您可以使用它来按位置获取字符,但不能设置它们。

因此,如果您想要更改某些字符,则必须将字符串拆分为多个部分,并从中构建所需的新字符串:

function swapStr(str, first, last){
    return str.substr(0, first)
           + str[last]
           + str.substring(first+1, last)
           + str[first]
           + str.substr(last+1);
}

或者,您可以将字符串转换为数组:

function swapStr(str, first, last){
    var arr = str.split('');
    swap(arr, first, last); // Your swap function
    return arr.join('');
}

答案 1 :(得分:2)

让我提供我理解的一面:交换数组的项目可能是这样的:

var myFish = ["angel", "clown", "mandarin", "surgeon"];
var popped = myFish.pop();
myFish.unshift(popped) // results in ["surgeon", "angel", "clown", "mandarin"]

关于交换字符串的第一个和最后一个字母可以使用正则表达式来完成,例如:

"mandarin".replace(/^(\w)(.*)(\w)$/,"$3$2$1")// outputs nandarim ==> m is last character and n is first letter

答案 2 :(得分:1)

我刚从Chrome中运行了您的代码,它似乎找不到我的工作。确保您传入的索引为"首先"和"最后"是正确的(记住JavaScript是基于0索引的)。您可能还想尝试使用console.log来打印出某些变量并进行调试,如果它仍然不适合您。

编辑:我没有意识到你试图操纵一个字符串;我以为你只是意味着一系列人物或价值观。

My code

答案 3 :(得分:1)

function swapStr(str, first, last) {
if (first == last) {
  return str;
}

if (last < first) {
  var temp = last;
  last = first;
  first = temp;
}

if (first >= str.length) {
  return str;

}
return str.substring(0, first) +
  str[last] +

  str.substring(first + 1, last) +

  str[first] +
  str.substring(last + 1);

}