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?
5 réponses
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))
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);
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]]);
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>
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));
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.