James N
James N

Reputation: 533

How to get length of string in javascript without using native length method

I am working on a practice problem:

Return the length of a string without using javascript's native string.length method.

The only ways I could think of would be substring or slice, but I'm stumped.

Upvotes: 5

Views: 22552

Answers (13)

jesse
jesse

Reputation: 1

function getStringLength(string) {
// Do NOT use any native 'length' methods.
// You might consider using 'substring' or 'slice' as alternatives.
 
  let i = 0;
  while (Number(string.slice(i, i+1)) !== 0) {
    i++;
 } return i;
}

var output = getStringLength('hello');
console.log(output); // --> 5

Upvotes: 0

Dheeraj Purohit
Dheeraj Purohit

Reputation: 36

This is the solution I came up with
I have used a while loop for getting the length of the input
Sharing Two approaches with a while loop

Approach no 1

    function getLength(input) {
        if(!input){
          return 'please provide input'
        }
        let i = 0;
        while (true) {
            if (input[i]) {
                i += 1
            }else{
                break
            }
        }
        return i
    }
    
console.log(getLength([1, 5, 3, 7, 8])) // 5
console.log(getLength("Hare Krishna")) // 12

Output
5 (for array)
12 (for string)

Approach no 2

function getLength(input){
  let i = 0;
  while(input[i] !== undefined){
    i++;
  }
  return i
}

console.log(getLength([1,2,3,48,8,9])) // 6

Output
6 (for array)

Upvotes: 0

Aaron Cloud
Aaron Cloud

Reputation: 315

The for in loop is the way to go I think. You can use slice or substring but for in loops can count strings easily too.

function getStringLength(string) {
      var length = 0;
      for (var i in string){
        length++;
      }
      return length;
      }

Upvotes: 0

I0_ol
I0_ol

Reputation: 1109

Yet another way to do it

function getStringLength(str){
  var count = 0;
  for(var letter in str){
    count += 1;
  }
  return count;
}

console.log(getStringLength('Mississippi')) // 11
console.log(getStringLength('')) // 0 

Upvotes: 0

MANJEET
MANJEET

Reputation: 1813

This will work.

function  length(str) {
    str = str.split(''); 
    var length = 0;
    str.forEach(function(element) { 
    length++;  
    });
    return length;    
}

length('hello'); // output 5

Upvotes: 0

Daniel T
Daniel T

Reputation: 23

I think this will work. If you start with '', it won't go into the while loop, and you'll just return 0.

function getStringLength(string) {
  var idx = 0;
  while (string[idx] !== undefined) {
    idx += 1;
  }
  return idx;
}

Upvotes: 0

dwedgeworth
dwedgeworth

Reputation: 1

function stringLength(str) {
  var count = 0;
  var index = 0;

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

Upvotes: 0

guest271314
guest271314

Reputation: 1

The briefest have been able to achieve so far using Object.keys(), Array.prototype.pop() and checking for empty string. Approach could probably be improved further.

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

@nnnnnnn utilizes the two methods at above far exceeding the initial attempt in brevity and addressing case of empty string.

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

Upvotes: 1

guest271314
guest271314

Reputation: 1

You can use spread element, Array.prototype.keys() iterator, Array.prototype.pop()

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

Upvotes: 1

cpugourou
cpugourou

Reputation: 781

You could use array.length so you answer the question not using the native string.length.

var Str = "Hello world!";
const CountAr = Str.split("").length;
console.log(CountAr);
/*12*/

Upvotes: 0

user3329290
user3329290

Reputation:

One way would be iterating through a split string like so:

var count = 0;
Array.from("string here".split("")).forEach(function(){count++});

Tip from Marko below in the comments to use the reduce function to shorten it to:

var count = Array.from("string here".split("")).reduce(function(count){return count+1}, 0);

Upvotes: 0

nnnnnn
nnnnnn

Reputation: 150010

You can loop over the string, testing to see whether there is a non-undefined value at each index (as soon as you get an undefined value you've run past the end of the string):

function strLength(s) {
  var length = 0;
  while (s[length] !== undefined)
    length++;
  return length;
}

console.log(strLength("Hello")); // 5
console.log(strLength("")); // 0

(I'm assuming that if you're not allowed to use the native string .length property that you probably shouldn't use the array .length property either with str.split("").length...)

Upvotes: 16

Andrew Willems
Andrew Willems

Reputation: 12458

Given that this is a practice problem, I suspect the OP may not want ES6/ES2015, but, just in case that's an option, and/or for whoever else is looking at this, here's a concise modern approach:

const str = "Hello world!";

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

(When I posted this, no other answer had proposed this solution. However, I had missed the fact that @MarkoGrešak had essentially proposed this exact solution in a comment to another question.)

Upvotes: 4

Related Questions