[英]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.