2009-12-15 8 views
1

J'essaye d'écrire du javascript dans un environnement où les crochets sont utilisés pour le remplacement de macro, donc ils ne peuvent pas être utilisés normalement dans le script.Accéder à Javascript Array sans utiliser [] Brackets

Si je crée un tableau en tant qu'objet avec new Array(), je peux utiliser push() et pop() pour accéder aux éléments, mais pour les tableaux natifs, je n'arrive pas à trouver un moyen d'accéder aux éléments sans utiliser de parenthèses. Par exemple, le tableau retourné par:

var allElements = document.getElementsByTagName("*"); 

Est-il possible d'assigner un tableau natif dans un objet Array, donc je peux utiliser push() et pop(), ou est-il une autre façon de pénétrer à l'intérieur?

+4

N'existe-t-il aucun moyen d'échapper les crochets de l'environnement macro? Cela semble être la façon la plus simple de s'y prendre. – DMI

+1

Où seront ces remplacements de marco?Sera l'intérieur des fichiers javascript inclus en externe? – Zoidberg

+0

Ceci pour un générateur de rapport HTML qui n'a pas vraiment été conçu pour le piratage dans ce Javascript. Je viens aussi de trouver qu'il remplace '|' par '~' dans mon soupir de RegExp. Merci à tous pour l'aide! – ovinophile

Répondre

4

Pour NodeList collections, vous pouvez utiliser .item():

var allElements = document.getElementsByTagName("*"); 
var firstItem = allElements.item(0); 

Source: NodeList

1

Vous pouvez définir une macro qui insère les [] accolades. Cela pourrait être possible. :-)

Cependant, je me demande pourquoi vous utilisez encore cet environnement - même Notepad pourrait être plus à l'aise alors.

2

Tout d'abord, le moteur JavaScript convertira littéraux à des objets pour vous (il le fait dans les coulisses)

var arr = [1,2,3]; 
alert(arr.pop()); 

Deuxièmement, comprendre que la valeur de retour de document.getElementsByTagName()n'est pas un tableau. C'est un HTMLCollection.

+0

Voté? *Vraiment?*. Soupir. –

+0

Bien qu'elle fournisse des informations précises, cette réponse manque le point d'éviter les [] crochets (et ne semble donc pas utile pour répondre à la question). –

+0

Non, ce n'est pas le cas. J'ai clairement montré comment vous pouvez utiliser des méthodes d'objet tableau sur des littéraux de tableau. J'ai simplement * noté * que la valeur de retour de 'document.getElementsByTagName()' n'est pas un tableau, donc ces méthodes ne fonctionneront pas de toute façon. –

6

oui, vous pouvez utiliser le prototype et la méthode de coupe par exemple (ne fonctionne pas dans IE):

var index = 1; 
Array.prototype.slice.call(allElements,index,index+1); 

Pour IE, la seule façon que je peux penser est de copier tous les éléments de la collection au tableau :

var newarr = new Array(); 
for(var i=0;i<allElements.length;i++){ 
    newarr.push(allElements[i]); 
} 

Ou, vous pouvez utiliser cette fonction (Works dans IE et Firefox):

window.atIndex = function(array,index){ 
    return eval("array" + String.fromCharCode(91) + String(index) + String.fromCharCode(93)); 
} 

Obtenez une ite m en utilisant atIndex(allElements,0);

+0

Très belle [5 caractères] – Zoidberg

+2

Non, allez dans IE, désolé. "Erreur: objet JScript attendu" –

+0

Crap, va réparer ma réponse. – nemisj

-1

pour les boucles, vous pouvez parcourir la collection comme
for(var item in array){
doStuff(item);
}

Vous pouvez également utiliser la fonction MakeArray de Jquery
var newArray = $.makeArray(array);

Je suppose que vous avez pas le choix dans votre carré de l'environnement les accolades sont une chose normale dans des tonnes de langages de programmation. La solution idéale est d'utiliser un environnement qui ne limite pas votre programmation

3
arr = [1, 2, 3]; //just a dummy array, I assume you don't use square brackets to assign an array in your code 
el0 = arr.slice(0,1).pop(); //returns 0th element 
el1 = arr.slice(1,2).pop(); //returns 1st element 
... 

Ne pas avoir IE, mais cela fonctionne bien dans Firefox.

+0

+1 pour la pensée créative! –