为什么拼接功能在JavaScript中无法正常工作?

时间:2019-03-13 03:33:47

标签: javascript

function scramble(str1, str2) {
    for (var i=0; i<str2.length; i++){
        if (str1.split('').indexOf(str2[i])>=0){
            str1.split('').splice(str1.split('').indexOf(str2[i]),1);
            console.log(str1)
        } else {return false};
    } return true
}

scramble('rkqodlw','world')

我对拼接函数有疑问,运行此代码后,str1不会每次都更改,而且我真的不知道问题出在哪里。

4 个答案:

答案 0 :(得分:1)

str1.split('')返回新的字符串数组,并且str1不变。

答案 1 :(得分:1)

因为您没有在splice()上应用str1。您正在splice()上应用str1.split('')。要解决此问题,请在函数开始时将str1分配给数组,然后使用splice()

根据MDN

  

objects以外的所有类型均定义了不可变值(无法更改的值)。例如,与C不同,字符串是不可变的。我们将这些类型的值称为原始值

str1.split('')不会更改str1的值,而是return一个应存储在变量中的新值。

function scramble(str1, str2) {
    str1 = str1.split('');
    for (var i=0; i<str2.length; i++){
        if (str1.indexOf(str2[i])>=0){
            str1.splice(str1.indexOf(str2[i]),1);
            console.log(str1.join(''))
        } else {return false};
    } return true
}

scramble('rkqodlw','world')

更简便的方法

您可以使用filter()includes()

function scramble(str1, str2) {
     return str1.split('').filter(x => !str2.includes(x))
}
console.log(scramble('rkqodlw','world'))

答案 2 :(得分:0)

str1.split('')返回一个新数组。在此数组上调用splice会修改该数组,而不是str1

在数组上拼接会修改该数组:

let arr = [1, 2, 3];
arr.splice(2);
arr;  // [1, 2]

但不是构造数组的字符串。

let str = '1 2 3';
let arr = str.split(' ');
arr.splice(2);
str; // ' 1 2 3'
arr; // ['1', '2']

答案 3 :(得分:0)

您将返回与str1相同的结果,而不是带有after拼接值。因此,您需要在循环spl之前定义split。

function scramble(str1, str2) {
  var spl =str1.split('');
  for (var i = 0; i < str2.length; i++) {
    if (spl.indexOf(str2[i]) > -1) {
      spl.splice(spl.indexOf(str2[i]), 1);
      console.log(spl.join(''))
    } else {
      return false
    };
  }
  return true
}

scramble('rkqodlw', 'world')

简化版

function scramble(str1, str2) {
  str2.split('').forEach(a=> str1=str1.replace(a,''));
  return str1;
}

console.log(scramble('rkqodlw', 'world'))