Vous pouvez remplir entièrement un tableau et vous pouvez créer un index direct dans le tableau au moment de l'exécution. Une fois que la structure de données originale est créée, cela sera rapide à l'exécution, mais pas très efficace en termes de stockage. En général, je ne recommande pas cette méthode, mais de construire le tableau :
var ranges = [
{min: 0, max: 400, value: 'dog'},
{min: 401, max: 1000, value: 'cat'},
{min: 1001, max: 1233, value: 'rat'}
];
var lookupArray = [];
for (var i = 0; i < ranges.length; i++) {
// make sure array is big enough
lookupArray.length = Math.max(lookupArray.length, ranges[i].max);
for (var j = ranges[i].min, j <= ranges[i].max; j++) {
lookupArray[j] = ranges[i].value;
}
}
// function to find the value for a given index
function findValue(index) {
return(lookupArray[index]);
}
Ou, dans une structure plus compacte, vous pouvez utiliser une structure de données et une fonction comme celle-ci :
var ranges = [
{min: 0, max: 400, value: 'dog'},
{min: 401, max: 1000, value: 'cat'},
{min: 1001, max: 1233, value: 'rat'}
];
function findValue(index) {
var range;
for (var i = 0; i < ranges.length; i++) {
range = ranges[i];
if (index >= range.min && index <= range.max) {
return(range.value);
}
}
}
alert(findValue(402)); // 'cat'
Vous pouvez également utiliser un tableau direct avec des positions implicites dans le tableau (le code et les données sont un peu plus compacts, mais les deux sont un peu moins lisibles) :
var ranges = [
0, 400, 'dog',
401, 1000, 'cat',
1001, 1233, 'rat'
];
function findValue(index) {
for (var i = 0; i < ranges.length; i+=3) {
if (index >= ranges[i] && index <= ranges[i+1]) {
return(ranges[i+2];
}
}
}