我正在研究练习题:
不使用javascript的原生
string.length
方法返回字符串的长度。
我能想到的唯一方法是substring
或slice
,但我很难过。
答案 0 :(得分:12)
您可以遍历字符串,进行测试以查看每个索引是否存在非undefined
值(只要您获得undefined
值,就会超过结束字符串):
function strLength(s) {
var length = 0;
while (s[length] !== undefined)
length++;
return length;
}
console.log(strLength("Hello")); // 5
console.log(strLength("")); // 0

(我假设如果您不允许使用本机字符串.length
属性,那么您可能不应该使用数组.length
属性{ {1}} ...)
答案 1 :(得分:4)
鉴于这是一个练习题,我怀疑OP可能不想要ES6 / ES2015,但是,如果这是一个选项,和/或对于其他人正在看这个,这里是一个简洁的现代方法:
const str = "Hello world!";
console.log([...str].reduce(a => a+1, 0));
(当我发布这个时,没有其他答案提出这个解决方案。但是,我错过了这个事实,@MarkoGrešak基本上在对另一个问题的评论中提出了这个确切的解决方案。)
答案 2 :(得分:1)
您可以使用展开元素Array.prototype.keys()
迭代器,Array.prototype.pop()
var str = "abc";
var len = [...[0,...str].keys()].pop();
console.log(len, str.length);
答案 3 :(得分:1)
到目前为止,我们已经能够使用Object.keys()
,Array.prototype.pop()
并检查空字符串。方法可能会进一步改善。
var len = str === "" ? 0 : +Object.keys(str).pop()+1;
@nnnnnnn在上面使用了两种方法,超过了简洁的初始尝试和解决空字符串的情况。
var len = +Object.keys(str+' ').pop();
答案 4 :(得分:0)
一种方法是迭代分裂字符串,如下所示:
var count = 0;
Array.from("string here".split("")).forEach(function(){count++});
请在评论中使用reduce
功能将其缩短为以下标记:
var count = Array.from("string here".split("")).reduce(function(count){return count+1}, 0);
答案 5 :(得分:0)
您可以使用array.length,因此您可以回答不使用本机string.length的问题。
var Str = "Hello world!";
const CountAr = Str.split("").length;
console.log(CountAr);
/*12*/
答案 6 :(得分:0)
function stringLength(str) {
var count = 0;
var index = 0;
while(string[index] !== undefined){
count += 1;
index += 1;
}
return count;
}
答案 7 :(得分:0)
我认为这会奏效。如果你从''开始,它就不会进入while循环,你只会返回0。
function getStringLength(string) {
var idx = 0;
while (string[idx] !== undefined) {
idx += 1;
}
return idx;
}
答案 8 :(得分:0)
这将起作用。
function length(str) {
str = str.split('');
var length = 0;
str.forEach(function(element) {
length++;
});
return length;
}
length('hello'); //输出5
答案 9 :(得分:0)
还有另一种方法
function getStringLength(str){
var count = 0;
for(var letter in str){
count += 1;
}
return count;
}
console.log(getStringLength('Mississippi')) // 11
console.log(getStringLength('')) // 0
答案 10 :(得分:0)
for循环是我认为的方法。您可以使用slice或substring,但是for in循环也可以轻松地计算字符串。
function getStringLength(string) {
var length = 0;
for (var i in string){
length++;
}
return length;
}