J'ai un tableau 2D et je souhaite accéder à un autre tableau, par exemple:

var arr = [['one','two'],['three','four']];
var arr2 = [1,1];

Je veux avoir la valeur à arr [arr2 [0]] [arr2 [1]]. Existe-t-il une autre façon d'obtenir la valeur, car si je le fais de cette façon, la ligne deviendrait extrêmement longue et difficile à lire.

Quelque chose comme:

arr[arr2]

Je sais que cela ne fonctionne pas, mais y a-t-il quelque chose de similaire en JavaScript?

2
Teletubbie 13 avril 2018 à 16:45

5 réponses

Meilleure réponse

Utilisez reduce avec try/catch pour vous assurer qu'il n'a pas de valeurs susceptibles de générer une erreur (par exemple, arr2 = [1,1,2,3,4])

function evaluate(arr1, arr2)
{
    try
    {
      return arr2.reduce( (a, c) => a[c], arr);
    }
    catch(e) {}
}

Démo

function evaluate(arr1, arr2) {
  try {
    return arr2.reduce((a, c) => a[c], arr)
  } catch (e) {}
}

var arr = [['one','two'],['three','four']];
var arr2 = [1,1];

console.log(evaluate(arr, arr2))
0
gurvinder372 13 avril 2018 à 13:50

Vous pouvez utiliser Tableau # réduire sur arr2 et passez arr comme tableau initial.

Démo

let arr = [['one','two'],['three','four']],
    arr2 = [1,1],
    res = arr2.reduce((a,c) => a[c], arr);

console.log(res);
0
Kristianmitk 13 avril 2018 à 13:57

Utilisez arr[arr2[0]][arr2[1]] au lieu de arr[arr2]. Depuis, vous n'avez que deux valeurs de tableau dans votre tableau imbriqué pour arr, vous pouvez spécifier l'index 0 et 1 pour arr2 comme index de arr. Qui est au format arr[index1][index2]

var arr = [['one','two'],['three','four']];
var arr2 = [1,1];

console.log(arr[arr2[0]][arr2[1]]);
0
Ankit Agarwal 13 avril 2018 à 13:48

Voici une alternative:

Un simple for-loop

var arr = [ ['one', 'two'], ['three', 'four'] ],
    indexes = [1, 1];

Array.prototype.getFrom = function(indexes) {
  var current;
  for (var index of indexes) current = current ? current[index] : this[index];
  return current;
}

console.log(arr.getFrom(indexes));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://codepen.io/egomezr/pen/dmLLwP.js"></script>
0
Ele 13 avril 2018 à 13:57

Vous pouvez réduire le tableau en utilisant les indices, avec un tableau par défaut pour les tableaux internes inexistants.

function getValue(array, indices) {
    return indices.reduce((a, i) => (a || [])[i], array);
}

var array = [['one', 'two'], ['three', 'four']],
    indices = [1, 1];

console.log(getValue(array, indices));
1
Nina Scholz 13 avril 2018 à 13:51