私は練習問題に取り組んでいます使用せずにJavaScriptで文字列の長さを取得する方法:ネイティブlengthメソッド
戻りジャバスクリプトのネイティブ
string.length
メソッドを使用せずに文字列の長さを。
私が考えることができる唯一の方法はsubstring
またはslice
ですが、私は困惑しています。
私は練習問題に取り組んでいます使用せずにJavaScriptで文字列の長さを取得する方法:ネイティブlengthメソッド
戻りジャバスクリプトのネイティブ
string.length
メソッドを使用せずに文字列の長さを。
私が考えることができる唯一の方法はsubstring
またはslice
ですが、私は困惑しています。
あなたは非undefined
値が各インデックス(できるだけ早くあなたが文字列の終わりを過ぎて実行したundefined
値を取得するよう)であるかどうかを確認するためにテストし、文字列をループすることができます:
function strLength(s) {
var length = 0;
while (s[length] !== undefined)
length++;
return length;
}
console.log(strLength("Hello")); // 5
console.log(strLength("")); // 0
str.split("").length
で配列
.length
プロパティを使用してはならないネイティブの文字列
.length
プロパティを使用することを許可されていない場合と仮定しています)
を含んでいます。私は実際に 'for-loop'を使ってバリエーションを試しました。そしてあなたの正しい前提の両方のためにテストに失敗しました。これは私がもともと 'slice'か' substring'のいずれかでこれを行う方法を探していた理由です。これは何だったはずですか? –
一つの方法は、そのように分割された文字列を反復処理されます:マルコから
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);
それをそうするつもりなら、少なくとも.reduce(function(count){return count + 1}、0) 'を使用してください。 –
これは良い考えです、もっと最近reduce関数を使うことを意味しています。 – andrew196
@MarkoGrešak、私は私が投稿した前に他の答えをチェックしましたが、同じソリューションを提案したあなたのコメントは見ていませんでした。それが期限のあるところで信用を得たいだけです。 –
あなたは広がりを使用することができます要素、Array.prototype.keys()
イテレータ、Array.prototype.pop()
var str = "abc";
var len = [...[0,...str].keys()].pop();
console.log(len, str.length);
これは空の文字列では機能しませんか? – nnnnnn
@nnnnnn更新された投稿を参照してください。 – guest271314
これは実践上の問題だと思うが、私はOPがES6/ES2015を望んでいない可能性があると思うが、オプションの場合や他の人にはこれを簡潔な近代的アプローチ:
const str = "Hello world!";
console.log([...str].reduce(a => a+1, 0));
私はこれを掲示するとき(、他の答えは、このソリューションを提案していませんでした。しかし、私@MarkoGrešakは基本的に別の質問にコメントでこの厳密解を提案したという事実を見逃していた。)
'str.split(" ")'と従来の非矢印関数減速器でさえ、これはまだかなり簡潔です。 – nnnnnn
最も簡潔には、これまでObject.keys()
、Array.prototype.pop()
を使用して、空の文字列のチェックを達成することができました。おそらくアプローチはさらに改善されるだろう。
var len = str === "" ? 0 : +Object.keys(str).pop()+1;
@nnnnnnnは、上記はるかに簡潔で、最初の試みを超えると、空の文字列の場合に対処する二つの方法を利用しています。
var len = +Object.keys(str+' ').pop();
'==='ではなく '=='で文字を保存することができます。 – nnnnnn
@nnnnnnまた、行から8つの空白文字を削除しても、さらに線を減らすことができます。 – guest271314
'var len =(+ Object.keys(str).pop ()+1)0 | – nnnnnn
array.lengthを使用すると、ネイティブstring.lengthを使用しない質問に答えることができます。
var Str = "Hello world!";
const CountAr = Str.split("").length;
console.log(CountAr);
/*12*/
function stringLength(str) {
var count = 0;
var index = 0;
while(string[index] !== undefined){
count += 1;
index += 1;
}
return count;
}
コードのみの回答は質問に答えるかもしれませんが、理解できない人には説明してください。 – Enstage
私はこれが機能すると思います。 ''で始まる場合は、whileループには入りません.
function getStringLength(string) {
var idx = 0;
while (string[idx] !== undefined) {
idx += 1;
}
return idx;
}
実際の質問は今ですか? –
JavaScriptの文字配列に文字列をどのように取得するのですか?(http://stackoverflow.com/questions/4547609/how-do-you-get-a-string-to-a-character- array-in-javascript) –
@KyleMuirは重複していません。 nnnnnnのように、私はネイティブの長さの方法を使用することはできません。それは配列 –