编写一个输入参数为字符串的函数。该函数应删除行中最长的单词(单词-由空格分隔的字符组,或由空格和字符串的开头(结尾)分隔的字符组)。
目前我的代码已经准备就绪,可以正常工作,但需要手动重写方法。特别是. push()(写在代码中,但不起作用,无法读取属性allWords-length)、. filter()和. replace()。您不能使用现成的函数。
预期结果:"字呜呜呜呜呜呜呜呜呜呜"
function deleteTheLongestWord(str){
let arrSent = strSplit(str, ".");
let allWords = [];
let biggestWord = '';
for (const elem in arrSent) {
let words = strSplit(arrSent[elem], ' ');
for (const word in words) {
allWords = arrPush(allWords, words[word])
}
}
for (const i in allWords) {
if(biggestWord.length < allWords[i].length){
biggestWord = allWords[i];
}
}
allWords = allWords.filter(function(e){
return e.length === biggestWord.length
})
for (let i = 0; i < allWords.length; i++) {
str = str.replace(" " + allWords[i], '');
}
console.log(str);
}
function arrPush(allWords, word){
allWords[allWords.length] = word
}
function strSplit(str, delimiter){
const arr = [""];
const len = delimiter.length;
let idx = 0;
for (let i = 0; i < str.length; i++) {
let sample = "";
for (let x = i; x < i + len; x++) {
sample += str[x];
}
if (sample === delimiter) {
i += len;
idx += 1;
arr[idx] = "";
}
if (str[i]) arr[idx] += str[i];
}
return arr
}
deleteTheLongestWord('word wooord wooooooooord wooooooord. wooooooooord woooooord woooord wooooooooord');
3条答案
按热度按时间0wi1tuuw1#
由于
allWords = arrPush(allWords, words[word]);
和arrPush
的编写方式,您的代码失败。第一次调用
arrPush
时,传递一个空数组allWords
和要推送到该数组的字(第二个参数)。但是因为函数
arrPush
没有返回,你基本上是在取消设置allWords
,也就是allWords = undefined
,所以代码错误是因为没有undefined
的length
属性。解决这个问题的关键是,只需将
return allWords;
作为arrPush
函数的结果,以便allWords
不断设置为数组的最新(稍微更完整)版本。kxe2p93d2#
下面是一个简短的函数,它完成了预期的任务:删除字符串中所有最长的单词。
这里是同一个函数,但有更多行注解和控制台日志,因此可以理解这个过程。
cyvaqqii3#
对于loop方法,可以使用split(),也可以使用filter()。