繁体   English   中英

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

[英]Why the splice function doesn't work properly in 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不会每次都更改,而且我真的不知道问题出在哪里。

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

因为您不是在str1上应用splice() 您正在对str1.split('')应用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')) 

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']

您返回的str1不等于剪接后的值,因此您需要在循环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')) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM