Raiyan
Raiyan

Reputation: 31

Is there a way to get corresponding index value in a 2nd array using the 1st array as a reference in Javascript?

I am very new to algorithm and programming in general. I may require more explanation than an average fellow. Apologies in advance.

My aim is to Create a function that returns a number, based on the string provided. I have been told that this can be done using loops. I believe my errors lies in the if statement. However, cant seem to figure it out. I would be glad if somebody could help.

function word(s) {
  let str = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero"];
  let int = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];

  for (let j = 0; j < int.length; j++) {
    for (let i = 0; i < str.length; i++) {
      if (s === str[i]) {
        return int[j]
      }
    }
  }
}

Upvotes: 1

Views: 721

Answers (5)

Roh&#236;t J&#237;ndal
Roh&#236;t J&#237;ndal

Reputation: 27242

Working Demo :

function getStringNumber(word) {
    let str = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero"];
  let int = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
  
  for (let i = 0; i < str.length; i++) {
    if (word === str[i]) return int[i];
  }
}
  
console.log(getStringNumber('nine') ?? 'No word found!');
  
  

Upvotes: 1

Trentium
Trentium

Reputation: 3729

Another option is to make use of the Map object, which allows the creation of a list of key-value pairs. Then, if the key is known, the value can immediately be gotten.

Under the hood this usually done via a hashing algorithm on the key, in which case the lookup for the key does not involve looping through all keys, but instead generates the hash from the key, a hash which is then used to directly find the value in the list. (It's a bit more complicated than that, but you can find out more by searching on array hashing techniques.)

So, the first step is to initialize the Map object by mapping the written version of the number as the key to the actual value of the number.

Then, once this mapping is created, for every instance where the lookup is required, it simply involves getting the value from the map.

function createMap( keyArray, valueArray ) {
  let map = new Map();
  for ( let i = 0; i < keyArray.length; i++ ) {
    map.set( keyArray[ i ], valueArray[ i ] );
  }
  return map;
}

let myMap = createMap( 
  ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero"],
  [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
)

console.log( myMap.get( "four" ) );
console.log( myMap.get( "two" ) );

This then has the distinct advantage of directly returning the value corresponding to the key without having to search the list of keys every time...

Upvotes: 0

xdeepakv
xdeepakv

Reputation: 8135

Actually, You dont need loop also. You can rearrange the strings and return the index based on the arrangement of the word in array.

const str = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];

function word(s) {
  return str.indexOf(s);
}
console.log(word("five"))

// In case you dont want to change order


function word1(s) {
  const str = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero"];
  const index = str.indexOf(s);
  return index < 9 ? index+1 : 0
}

console.log(word1("five"))
console.log(word1("zero"))

// Other way get index ussing findIndex

function word2(s) {
  return str.findIndex(item => item === s);
}
console.log(word2("five"))

// Other using single loop

function word3(s) {
  for (let i in str) {
    if (str[i] === s) return i;
  }
  // Incase not found
  return -1;
}
console.log(word3("five"))

Upvotes: 0

Robkwood
Robkwood

Reputation: 365

Essentially what you're looking to do is get the index of the input s in your str array, and return the item at the same index in your int array. You could accomplish this with just the one loop:

function word(s) {
    let str = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero"];
    let int = [1,2,3,4,5,6,7,8,9,0];
  
    for (let j = 0; j < int.length; j++){
        if (s === str[j]){
         return int[j]
        }
    }
}

Of course, this is reliant upon the order of values matching up in your str and int arrays.

Upvotes: 1

Nina Scholz
Nina Scholz

Reputation: 386883

You need only a single loop to find the index of the given word. If found return the value form the other array by using the actual index.

for (let i = 0; i < str.length; i++){
    if (s === str[i]) return int[i];
}

A short approach could use Array#lastIndexOf.

Upvotes: 0

Related Questions