0

我正在尝试制作一个自制trim()的 JavaScript 方法。我的意思是,我想要做的可以使用trim(): 从string.

我想出了这个繁琐的解决方案;我认为它应该起作用,但它根本不起作用;相反,它删除了 the 的所有元素,string array只留下一个array带有一个空格的字符串作为唯一元素。

这是我所做的代码的运行片段:

const stringWithManyWhiteSpaces = '        I like ants... Remember us   ';

const charArray = [...stringWithManyWhiteSpaces];

function killLeftToRight(charArr) {
    for ( let i = 0; i < charArr.length; i++) {
        if (charArr[i] === ' ') {
            charArr.splice(i + 1);
        } else {
             break;
        }
    }
}

function killRightToLeft(charArr) {
    for ( let i = charArr.length -1; i >= 0; i--) {
        if (charArr[i] === ' ') {
            charArr.splice(i + 1);
        } else {
            break;
        }
    }
}

function myTrim(){
  killRightToLeft(charArray)
  killLeftToRight(charArray);
  console.log(charArray)
}

myTrim();

谁能让我弄清楚我的代码有什么问题?非常感谢。

4

3 回答 3

3
  • 要从数组中删除项目,splice需要您在第二个参数中指定要删除的数量
  • splice将从数组中删除给定索引处的项目,因此在下一次迭代中,如果您以升序遍历索引,您可能会“跳过”一个项目,因为它的索引刚刚被重新计算

更易于使用.pop(从末尾删除)和.shift(从开头删除)。

const stringWithManyWhiteSpaces = '        I like ants... Remember us   ';

function killLeftToRight(charArr) {
    while (charArr[0] === ' ') {
        charArr.shift();
    }
}

function killRightToLeft(charArr) {
    while (charArr[charArr.length - 1] === ' ') {
        charArr.pop();
    }
}

function myTrim(str){
  const charArray = [...str];
  killRightToLeft(charArray);
  killLeftToRight(charArray);
  console.log(charArray.join(''));
}

myTrim(stringWithManyWhiteSpaces);

于 2021-10-10T21:30:19.647 回答
1

您的方法可以以不同的方式进行更改,因此它可以正常工作,如上一个答案中所述,但是如果您的目标是拥有自己的修剪实现,那么以更简单的方式实现它呢?:

const stringWithManyWhiteSpaces = `        


I like ants... Remember us   


   `;

function trimMe(stringToTrim) {
  return stringToTrim.replace(/^[\s\n]+|[\s\n]+$/g, '')
}

console.log(trimMe(stringWithManyWhiteSpaces));

于 2021-10-10T22:02:18.867 回答
0

删除空格所需的只是 string.trim()

于 2021-10-10T22:01:53.390 回答