1

I want to where is placed an element in an multidimentional array like that :

    var letterVariations = [ 
		[' ','0','1','2','3','4','5','6','7','8','9'],
		['A','a','B','b','C','c','D','d','E','e',';'],
		['Â','â','F','f','G','g','H','h','Ê','ê',':'],
		['À','à','I','i','J','j','K','k','È','è','.'],
		['L','l','Î','î','M','m','N','n','É','é','?'],
		['O','o','Ï','ï','P','p','Q','q','R','r','!'],
		['Ô','ô','S','s','T','t','U','u','V','v','“'],
		['W','w','X','x','Y','y','Ù','ù','Z','z','”'],
		['@','&','#','[','(','/',')',']','+','=','-'],
	];
	var coordinates = letterVariations.indexOf('u');
	console.log(coordinates);
	// Want to know that 'u' is 7 in the 7th array

Is it possible ?

3

2 Answers 2

1

Run a simple for loop and check if the character exists in the inner array using indexOf. return immediately once a match is found

var letterVariations = [
  [' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
  ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', ';'],
  ['Â', 'â', 'F', 'f', 'G', 'g', 'H', 'h', 'Ê', 'ê', ':'],
  ['À', 'à', 'I', 'i', 'J', 'j', 'K', 'k', 'È', 'è', '.'],
  ['L', 'l', 'Î', 'î', 'M', 'm', 'N', 'n', 'É', 'é', '?'],
  ['O', 'o', 'Ï', 'ï', 'P', 'p', 'Q', 'q', 'R', 'r', '!'],
  ['Ô', 'ô', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', '“'],
  ['W', 'w', 'X', 'x', 'Y', 'y', 'Ù', 'ù', 'Z', 'z', '”'],
  ['@', '&', '#', '[', '(', '/', ')', ']', '+', '=', '-'],
];

function getCoordinates(array, char) {
  for (let i = 0; i < array.length; i++) {
    const i2 = array[i].indexOf(char);
    if (i2 !== -1)
      return [i, i2]
  }
  return undefined
}

console.log(getCoordinates(letterVariations, 'u'))
console.log(getCoordinates(letterVariations, '@'))

Note: This returns the indexes and it is zero-based. If you want [7, 7], you need to return [i+1, i2]

Sign up to request clarification or add additional context in comments.

2 Comments

@JoeWarner please don't make such trivial edits. Especially when changing let to const makes little difference to the quality of this answer.
is it not best practice to use const for immutable properties? using let here has no benefit\. apologies if its a style thing feel free to change back...
0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

const letterVariations = [ 
		[' ','0','1','2','3','4','5','6','7','8','9'],
		['A','a','B','b','C','c','D','d','E','e',';'],
		['Â','â','F','f','G','g','H','h','Ê','ê',':'],
		['À','à','I','i','J','j','K','k','È','è','.'],
		['L','l','Î','î','M','m','N','n','É','é','?'],
		['O','o','Ï','ï','P','p','Q','q','R','r','!'],
		['Ô','ô','S','s','T','t','U','u','V','v','“'],
		['W','w','X','x','Y','y','Ù','ù','Z','z','”'],
		['@','&','#','[','(','/',')',']','+','=','-'],
];

function getIndexOfLetter(letter) {
  return letterVariations.reduce((result, values, index) => {
    if (result[0] > -1) return result;

    const found = values.indexOf(letter);

    return found > -1 ? [Number(index), found] : result;
  }, [-1, -1])
}

console.log(getIndexOfLetter('k'))

6 Comments

Consider using the index 1 of the result for the condition to check so that you're not needing to call .indexOf after the result has been found: return result[1] !== -1 ? result : [index, values.indexOf(letter)]
oh cool so it breaks faster after being found?
It won't break the .reduce(), but it will avoid searching the nested arrays after the result is found.
yeah sorry thats what i meant by breaking out :)
Ah, I see. Yes, it just makes it more efficient. Would be nice if there was a way to break a .reduce() early.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.