javascript - 为什么 JavaScript 中的 splice 函数不能正常工作?

标签 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')

我有一个关于 splice 函数的问题,运行这段代码后,str1 并没有每次都改变,我真的不知道问题出在哪里。

最佳答案

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

根据MDN

All types except objects define immutable values (values, which are incapable of being changed). For example and unlike to C, Strings are immutable. We refer to values of these types as primitive values.

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

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

关于javascript - 为什么 JavaScript 中的 splice 函数不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55133951/

相关文章:

javascript - GridView ImageButton 确认和删除记录

javascript - jQuery Document Ready 函数语法

javascript - 显示存储在 JavaScript 字符串中的 HTML 特殊字符

javascript - 关于文件上传的查询

javascript - .getDay() 奇怪的行为

javascript - 现有函数作为 Array.forEach 的回调

javascript - 使用 jQuery 构建动态表单部件

javascript - 主干同步后 Collection View 中的触发功能

javascript - 如何使用 superagent-mock 作为临时后端

javascript - 在经典 ASP 中动态返回一个 javascript 文件