题目
实现一个函数,在句子中找出最长的单词,并返回它的长度。函数的返回值应该是一个数字。
例:findLongestWord("May the force be with you") 应该返回 5.
方法一: shift()
shift()
方法是 JavaScript 数组对象的一个方法,用于移除数组的第一个元素,并返回该元素的值。同时,该方法会修改原始数组,使其长度减一,而且其他元素的索引也会随之减1。返回值
被移除的数组的第一个元素的值。如果数组为空(即没有可移除的元素),则返回
undefined
。示例
let arr = [1, 2, 3, 4, 5];
let firstElement = arr.shift();
console.log(firstElement); // 输出: 1
console.log(arr); // 输出: [2, 3, 4, 5]
function findLongestWord(str) {
//把字符串分割成单个字符的数组
let arr = str.split(' ');
//记录返回值结果
let result = 0;
//数组中还有元素时
while (arr.length > 0) {
//用itemLength记录arr删除的第一个元素的长度
let itemLength = arr.shift().length;
//比较两者,结果赋值为大的
if (itemLength > result) {
result = itemLength;
}
}
return result;
}
console.log(findLongestWord("May the force be with you"));
方法二:reduce()
function findLongestWord(str) {
// 将句子按照空格切割成单词数组
const words = str.split(' ');
// 使用reduce方法找出最长的单词,累加器(acc),当前元素(cur),函数内部比较当前元素(cur)和累加器(acc)的长度,返回较长的那个单词,作为下一次迭代的累加器(acc)的值。最终返回最长单词的长度
// reduce() 方法接收两个参数:回调函数和初始值
const longestWord = words.reduce((acc, cur) => {
return cur.length > acc.length ? cur : acc;
}, '');
// 返回最长单词的长度
return longestWord.length;
}
findLongestWord("May the force be with you")
方法三:直接遍历比较
function findLongestWord(sentence) {
// 将句子按空格分割成单词数组
let words = sentence.split(' ');
// 初始化最长单词长度为0
let maxLength = 0;
// 遍历单词数组
for (let i = 0; i < words.length; i++) {
// 比较当前单词长度与maxLength,更新maxLength
if (words[i].length > maxLength) {
maxLength = words[i].length;
}
}
// 返回最长单词的长度
return maxLength;
}
console.log(findLongestWord("May the force be with you"));
上述方法可用三元运算符简化:
function findLongestWord(str){
let arr=str.split(' ')
let res=0
for(let i=0;i<arr.length;i++){
res=arr[i].length>res?arr[i].length:res
}
return res
}
方法四:Map+sort()
function findLongestWord(str = '') {
// 使用 map 方法生成一个新数组,包含每个单词的长度
const lengthArr = str.split(' ').map(item => item.length)
//使用 sort() 方法默认将数组中的元素按照Unicode编码从小到大排列,返回数组中最后一个值
return lengthArr.sort()[lengthArr.length - 1]
}
console.log(findLongestWord('May the force with you'))
方法五:sort()+push()
var maxlength = function maxLength (s) {
let arr = s.split('');
let arr2 = [];
for(let i = 0; i < arr.length; i++) {
arr2.push(arr[i]);
}
arr2.sort();
maxLength = arr2[arr2.length - 1].length;
return maxLength;
}
方法四五的思维一致,都是将split('')方法处理过后的每个元素的长度存入数组中,再用sort()方法排序选取最大值。
题外话
ASCII编码和Unicode编码并非同一种编码,他们的编码顺序也有细微差别!
Unicode 码点的顺序和ASCII排序方式并不完全一样,尽管它们在某些范围内有相似性。
-
ASCII(美国信息交换标准代码):ASCII 是一个7位字符编码系统,定义了128个字符,包括控制字符(如换行符、退格等)和可显示的字符(字母、数字、标点符号等)。ASCII 编码是在计算机早期用于表示文本信息的标准,每个字符用一个字节(8位)表示。
-
Unicode:Unicode 是一个更广泛的字符编码系统,目标是包含世界上所有字符的统一编码方案。它使用多种编码方案来表示字符,其中最常见的是 UTF-8、UTF-16 和 UTF-32。Unicode 定义了超过137,000个字符,涵盖了世界上几乎所有语言的文字、符号和表情。
在排序方面,ASCII 编码中的字符是按照其数值顺序来排列的,例如 '0' 到 '9' 排在前面,然后是大写字母 'A' 到 'Z',最后是小写字母 'a' 到 'z'。这意味着在 ASCII 编码中,字符 '0' 的码点(48)小于字符 'A' 的码点(65),而字符 'A' 的码点又小于字符 'a' 的码点(97)。
Unicode 也继承了一部分 ASCII 的字符编码,即 ASCII 的字符被包含在 Unicode 的码点范围内,例如 'A' 对应的 ASCII 码点为65,而在 Unicode 中,它的码点也是65。但是,Unicode 不仅包含 ASCII 覆盖的范围,还包括了更多的字符和符号。
因此,Unicode 中的排序顺序可以视为对 ASCII 排序的扩展和增强,它不仅考虑了字母、数字和标点符号的顺序,还包括了世界上各种语言的字符,以及特殊符号和表情符号等。
总结来说,Unicode 码点的顺序在一定范围内类似于 ASCII 的排序方式,但是它更为全面和广泛,涵盖了更多字符,并支持多种语言和符号。