2017-02-18 1 views
1

私は練習問題に取り組んでいます使用せずにJavaScriptで文字列の長さを取得する方法:ネイティブlengthメソッド

戻りジャバスクリプトのネイティブstring.lengthメソッドを使用せずに文字列の長さを。

私が考えることができる唯一の方法はsubstringまたはsliceですが、私は困惑しています。

+1

実際の質問は今ですか? –

+0

JavaScriptの文字配列に文字列をどのように取得するのですか?(http://stackoverflow.com/questions/4547609/how-do-you-get-a-string-to-a-character- array-in-javascript) –

+0

@KyleMuirは重複していません。 nnnnnnのように、私はネイティブの長さの方法を使用することはできません。それは配列 –

答えて

5

あなたは非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プロパティを使用することを許可されていない場合と仮定しています)
+0

を含んでいます。私は実際に 'for-loop'を使ってバリエーションを試しました。そしてあなたの正しい前提の両方のためにテストに失敗しました。これは私がもともと 'slice'か' substring'のいずれかでこれを行う方法を探していた理由です。これは何だったはずですか? –

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); 
+1

それをそうするつもりなら、少なくとも.reduce(function(count){return count + 1}、0) 'を使用してください。 –

+0

これは良い考えです、もっと最近reduce関数を使うことを意味しています。 – andrew196

+0

@MarkoGrešak、私は私が投稿した前に他の答えをチェックしましたが、同じソリューションを提案したあなたのコメントは見ていませんでした。それが期限のあるところで信用を得たいだけです。 –

1

あなたは広がりを使用することができます要素、Array.prototype.keys()イテレータ、Array.prototype.pop()

var str = "abc"; 
 
var len = [...[0,...str].keys()].pop(); 
 
console.log(len, str.length);

+1

これは空の文字列では機能しませんか? – nnnnnn

+1

@nnnnnn更新された投稿を参照してください。 – guest271314

3

これは実践上の問題だと思うが、私はOPがES6/ES2015を望んでいない可能性があると思うが、オプションの場合や他の人にはこれを簡潔な近代的アプローチ:

const str = "Hello world!"; 
 

 
console.log([...str].reduce(a => a+1, 0));

私はこれを掲示するとき(、他の答えは、このソリューションを提案していませんでした。しかし、私@MarkoGrešakは基本的に別の質問にコメントでこの厳密解を提案したという事実を見逃していた。)

+0

'str.split(" ")'と従来の非矢印関数減速器でさえ、これはまだかなり簡潔です。 – nnnnnn

1

最も簡潔には、これまでObject.keys()Array.prototype.pop()を使用して、空の文字列のチェックを達成することができました。おそらくアプローチはさらに改善されるだろう。

var len = str === "" ? 0 : +Object.keys(str).pop()+1; 

@nnnnnnnは、上記はるかに簡潔で、最初の試みを超えると、空の文字列の場合に対処する二つの方法を利用しています。

var len = +Object.keys(str+' ').pop(); 
+1

'==='ではなく '=='で文字を保存することができます。 – nnnnnn

+0

@nnnnnnまた、行から8つの空白文字を削除しても、さらに線を減らすことができます。 – guest271314

+1

'var len =(+ Object.keys(str).pop ()+1)0 | – nnnnnn

0

array.lengthを使用すると、ネイティブstring.lengthを使用しない質問に答えることができます。

var Str = "Hello world!"; 
const CountAr = Str.split("").length; 
console.log(CountAr); 
/*12*/ 
0
function stringLength(str) { 
    var count = 0; 
    var index = 0; 

    while(string[index] !== undefined){ 
    count += 1; 
    index += 1; 
    } 
    return count; 
} 
+2

コードのみの回答は質問に答えるかもしれませんが、理解できない人には説明してください。 – Enstage

0

私はこれが機能すると思います。 ''で始まる場合は、whileループには入りません.

function getStringLength(string) { 
    var idx = 0; 
    while (string[idx] !== undefined) { 
    idx += 1; 
    } 
    return idx; 
} 
関連する問題