For..In boucles dans javascript – paires de valeurs clés

Je me demandais s'il y avait une façon de faire quelque chose comme une boucle PHP foreach dans JavaSript. La fonctionnalité que je recherche est quelque chose comme ça: (Snippet PHP)

foreach($data as $key => $value) { } 

Je regardais le JS pour for..in boucle, mais il semble y avoir aucun moyen de spécifier le as . Si je fais cela avec une boucle 'normale' pour for(var i = 0; i < data.length; i++ ), existe-t-il un moyen de saisir la clé => les paires de valeurs?

     for (var k in target){ if (target.hasOwnProperty(k)) { alert("Key is " + k + ", value is" + target[k]); } } 

    hasOwnProperty est utilisé pour vérifier si votre target vraiment cette propriété, plutôt que de l'avoir hérité de son prototype. Un peu plus simple serait:

     for (var k in target){ if (typeof target[k] !== 'function') { alert("Key is " + k + ", value is" + target[k]); } } 

    Il suffit de vérifier que k n'est pas une méthode (comme si la target était un array vous indexOf beaucoup de méthodes alertées, par exemple, indexOf , push , pop , etc.)

    Personne n'a mentionné Object.keys donc je le mentionnerai.

     Object.keys(obj).forEach(function (key) { // do something with obj[key] }); 

    The for in va travailler pour vous. Si vous pensez à un objet en tant que carte:

     for(key in obj){ // The key is key // The value is obj[key] } 
     var obj = {...}; for (var key in obj) { var value = obj[key]; // now you can use key as the key, value as the... you guessed right, value } 

    La syntaxe php est simplement du sucre.

    Je suppose que vous savez que i la clé et que vous pouvez obtenir la valeur via les data[i] (et que vous voulez juste un raccourci pour cela).

    ECMAScript5 introduit pour forEach [MDN] pour les tableaux (il semble que vous avez un tableau):

     data.forEach(function(value, index) { }); 

    La documentation MDN fournit une cale pour les navigateurs qui ne le supportent pas.

    Bien sûr, cela ne fonctionne pas pour les objets, mais vous pouvez créer une fonction similaire pour eux:

     function forEach(object, callback) { for(var prop in object) { if(object.hasOwnProperty(prop)) { callback(prop, object[prop]); } } } 

    Comme vous avez marqué la question avec jquery , jQuery fournit $.each [docs] qui boucle sur les deux structures, les arborescences et les objets.

    Si vous pouvez utiliser ES6 de manière native ou avec Babel (compilateur js), vous pouvez faire ce qui suit:

     let test = {a: 1, b: 2, c: 3}; for (let [key, value] of Object.entries(test)) { console.log(key, value); } 

    Qui imprimera cette sortie:

     a 1 b 2 c 3 
    • Documentation Object.entries
    • Pour … de la documentation
    • Destructurer la documentation d' affectation

    J'espère que cela aide! =)

    Vous pouvez utiliser le for..in pour cela.

     for (var key in data) { var value = data[key]; } 
     for (var key in myMap) { if (myMap.hasOwnProperty(key)) { console.log("key =" + key); console.log("value =" + myMap[key]); } } 

    En javascript, chaque objet possède un tas de paires de valeurs-clés intégrées qui ont une méta-information. Lorsque vous faites le tour de toutes les paires de valeurs-clés pour un objet, vous les interrogez également. L'utilisation de hasOwnProperty () les filtre.

    ES6 fournira Map.prototype.forEach (rappel) qui peut être utilisé comme ceci

     myMap.forEach(function(value, key, myMap) { // Do something }); 

    Vous pouvez utiliser une boucle 'for in' pour ceci:

     for (var key in bar) { var value = bar[key]; } 

    Voici un exemple qui devient aussi proche que vous obtenez.

     for(var key in data){ var value = data[key]; //your processing here } 

    Si vous utilisez jQuery, consultez: http://api.jquery.com/jQuery.each/

    Oui, vous pouvez avoir des tableaux associatifs également en javascript:

     var obj = { name:'some name', otherProperty:'prop value', date: new Date() }; for(i in obj) { var propVal = obj[i]; // i is the key, and obj[i] is the value ... } 
     var global = (function() { return this; })(); // Pair object, similar to Python function Pair(key, value) { this.key = key; this.value = value; this.toString = function() { return "(" + key + ", " + value + ")"; }; } /** * as function * @param {String} dataName A String holding the name of your pairs list. * @return {Array:Pair} The data list filled * with all pair objects. */ Object.prototype.as = function(dataName) { var value, key, data; global[dataName] = data = []; for (key in this) { if (this.hasOwnProperty(key)) { value = this[key]; (function() { var k = key, v = value; data.push(new Pair(k, v)); })(); } } return data; }; var d = { 'one': 1, 'two': 2 }; // Loop on your (key, list) pairs in this way for (var i = 0, max = d.as("data").length; i < max; i += 1) { key = data[i].key; value = data[i].value; console.log("key: " + key + ", value: " + value); } // delete data when u've finished with it. delete data;