var arr = [foo,bar,xyz];
arr[arr.indexOf('bar')] = true;
Existe-t-il un moyen plus simple de faire cela dans JS?Javascript Tableaux - Alternative à arr [arr.indexOf()]?
var arr = [foo,bar,xyz];
arr[arr.indexOf('bar')] = true;
Existe-t-il un moyen plus simple de faire cela dans JS?Javascript Tableaux - Alternative à arr [arr.indexOf()]?
Vous pouvez simplement utiliser des objets.
var obj = {foo: true, baz: false, xyz: true};
obj.baz = true;
ne veux-tu pas dire 'obj.baz = true'? –
Que je fais, fils! – Louis
Vous devriez également noter la syntaxe 'obj [" baz "]', qui est ce que je pense que l'OP veut. –
Toutes les valeurs de ce tableau sont déjà indéfinies.
(Vous avez édité votre message) Je ne sais pas pourquoi vous vous plaignez de 2 lignes entières de code si. Réponse courte non, vous ne pouvez pas accéder à un index d'un tableau sans connaître l'index.
Un IE moyen sûr serait de créer une fonction prototypé qui vous permet de définir facilement:
Array.prototype.setKeysWithValue = function(keyValue,newValue)
{
var i;
for (i in this)
{
if (this[i] === keyValue)
this[i] = newValue;
}
}
Cela peut ensuite être utilisé comme:
var arr = ['foo','bar','xyz'];
arr.setKeysWithValue('bar',true);
Mon mauvais. Je voulais juste demander s'il y a moyen de se référer à un élément Array sans savoir que son index est différent de arr [arr.indexOf (quelque chose)]. J'ai mis à jour le code; Merci. – tta
@Andrew - vu que IE <9 n'a pas '.indexOf()' sur les tableaux, ce n'est pas une question invalide, votre réponse est un peu condescendante, et non informée. Cela aurait dû être un commentaire si quelque chose. –
Pourquoi publiez-vous des réponses qui ne sont pas des réponses? Ceux-ci devraient être des commentaires. – Robert
Dans votre exemple, vous ne remplaceriez réellement "bar" par true; votre tableau résultant ressemblerait à [foo, true, xyz]
.
Je pense qu'il est supposé que ce que vous demandez est une alternative à avoir un ensemble de tableaux pour les clés et un ensemble de tableaux pour les valeurs, dont il n'y a pas de meilleure façon. Toutefois, vous pouvez utiliser un tableau associatif ou des objets pour conserver une paire de valeurs de clé.
var f = false, t = true;
// associative array
var arr = new Array();
arr["foo"] = arr["bar"] = arr["foobar"] = f;
arr["bar"] = t;
// object
var obj;
obj = {"foo":f, "bar":f, "foobar":f};
obj["bar"] = t;
// the difference is seen when you set arr[0]=t and obj[0]=t
// the array still maintains it's array class, while the object
// is still a true object
Il est important de réaliser quelques choses si vous utilisez cette méthode:
array.length
n'est plus, car il ne tient compte que des tableaux par index numérique, il ne les propriétés du tableau compte pas, ce qui est ce que les clés dans un tableau associatif sont[foo, bar, xyz, bar, foobar, foo]
, où l'indice devrait retourner la première occurrence dans tout autre navigateur que IE < = 8Une autre façon de faire ce que vous spécifiquement poser est:
Array.prototype.replace = function(from,to){ this[this.indexOf(from)]=to; };
Array.prototype.replaceAll = function(from,to){ while(this.indexOf(from)>=0){this[this.indexOf(from)]=to;} };
var arr = new Array();
arr=[ "foo", "bar", "foobar", "foo" ];
arr.replace("bar",true); // [ "foo", true, "foobar", "foo" ]
arr.replaceAll("foo",false); // [ false, true, "foobar", false ]
Voici quelques alternatives à '.indexOf()' qui a un support IE terne, http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array/143863 # 143863 – Robert
bienvenue à empiler débordement, ne pas oublier de sélectionner la réponse la plus appropriée et upvote les réponses que vous avez trouvé utile. – vol7ron