fonction de mappage de l'objet (au lieu d'une matrice)

Cette traduction: la fonction Carte pour les objets (tableaux de INSTEAD)

J'ai un objet: j'ai un objet:

myObject = { 'a': 1, 'b': 2, 'c': 3 }

Natif cherche le I Méthode ,, Comparable à Array.prototype.mapcelle utilisée serait la suivante: Je cherche est similaire à des Array.prototype.mapméthodes natives, qui seront de la manière suivante:

newObject = myObject.map(function (value, label) {
    return value * value;
});

// newObject is now { 'a': 1, 'b': 4, 'c': 9 }

TEL avoir Javascript Does mapfonction pour les objets? JavaScript si cet objet mapfonction? (Le Je veux que cela pour Node.JS, donc le propos de I Do not Care Cross-Browser ET DÉLINQUANCE.) (Je veux l' utiliser comme Node.JS, donc je ne me soucie pas de problèmes multi-navigateur.)


# 1 étage

Référence: https://stackoom.com/question/108t8/ cartographie des objets fonctionnels - au lieu d'un tableau


Maison # 2

Au map functionn'existe pas à l'ON Object.prototypecomme bon vous semble donc il peut Emuler map functionen Object.prototypen'existe pas, mais vous pouvez simuler comme celui - ci

var myMap = function ( obj, callback ) {

    var result = {};

    for ( var key in obj ) {
        if ( Object.prototype.hasOwnProperty.call( obj, key ) ) {
            if ( typeof callback === 'function' ) {
                result[ key ] = callback.call( obj, obj[ key ], key, obj );
            }
        }
    }

    return result;

};

var myObject = { 'a': 1, 'b': 2, 'c': 3 };

var newObject = myMap( myObject, function ( value, key ) {
    return value * value;
});

Maison # 3

Il est assez facile d'écrire un: écrire un très simple:

Object.map = function(o, f, ctx) {
    ctx = ctx || this;
    var result = {};
    Object.keys(o).forEach(function(k) {
        result[k] = f.call(ctx, o[k], k, o); 
    });
    return result;
}

avec le code d'exemple: Exemple de code:

> o = { a: 1, b: 2, c: 3 };
> r = Object.map(o, function(v, k, o) {
     return v * v;
  });
> r
{ a : 1, b: 4, c: 9 }

NB: Vous avez également android.permission à cette version (OPTIONNEL) SET à Le thiscontexte dans le rappel, le Tout comme à la Arrayméthode ,. Note: Cette version vous permet également de ( en option) définir la fonction de rappel thiscontexte, tout de Arrayla même façon.

EDIT - changé à l' utilisation de la supprimer Object.prototype, pour de ce que les TI ne jurent pas avec l'une propriété existante nommée mapON à l'objet. Modifier - Modifier la suppression de Object.prototypeson nom ne soit pas associé à une utilisation existante sur l'objet pour faire en sorte que les mappropriétés des conflits .


# 4 étage

Des autochtones ne y mapau L' Objectobjet, mais comment le propos du présent: ne pas l' Objectobjet local map, mais comment faire face à:

 var myObject = { 'a': 1, 'b': 2, 'c': 3 }; Object.keys(myObject).map(function(key, index) { myObject[key] *= 2; }); console.log(myObject); // => { 'a': 2, 'b': 4, 'c': 6 } 

Facilement vous pouvez itérer Mais un restaurant à l' aide de l' objet for ... in: mais vous pouvez utiliser for ... inles objets suivants facilement itération objet:

 var myObject = { 'a': 1, 'b': 2, 'c': 3 }; for (var key in myObject) { if (myObject.hasOwnProperty(key)) { myObject[key] *= 2; } } console.log(myObject); // { 'a': 2, 'b': 4, 'c': 6 } 

Mise à jour des mises à jour

Beaucoup de gens sont de mentionner que les méthodes précédentes ne renvoient pas un nouvel objet, mais fonctionnent sur l'objet lui - même. De nombreuses personnes mentionnées dans la méthode précédente ne renvoie pas un nouvel objet, mais l'objet lui - même fonctionne. Pour cette question , je voulais ajouter une autre solution qui retourne un nouvel objet et feuilles l'objet original tel qu'il est: pour cette raison, je voudrais ajouter une autre solution, la solution est de retourner un nouvel objet et conserver l'objet original inchangé:

 var myObject = { 'a': 1, 'b': 2, 'c': 3 }; // returns a new object with the values at each key mapped using mapFn(value) function objectMap(object, mapFn) { return Object.keys(object).reduce(function(result, key) { result[key] = mapFn(object[key]) return result }, {}) } var newObject = objectMap(myObject, function(value) { return value * 2 }) console.log(newObject); // => { 'a': 2, 'b': 4, 'c': 6 } console.log(myObject); // => { 'a': 1, 'b': 2, 'c': 3 } 

Array.prototype.reduceréduit un tableau à une seule valeur par fusion quelque peu la valeur précédente avec le courant. Array.prototype.reduceEn fusionnant la valeur précédente et la valeur de courant dans une certaine mesure, la matrice sera réduit à une valeur unique. Alberghiera un initialisées Catena par AN IS de l'objet vide {}. La chaîne se compose d'un objet vide {}initialisation. Chaque itération Une nouvelle nouvelle clé de ON myObjectest ajouté avec comme au deux fois à la valeur de clé. A chaque itération, ajoutera la myObjectvaleur des nouvelles obligations et obligations doublé.

Mise à jour des mises à jour

Les nouvelles fonctionnalités nouvelle ES6 Avec, il y a une façon plus élégante à Express objectMap. Avec de nouvelles fonctionnalités ES6, il existe un moyen d'exprimer plus élégant objectMap.

 const objectMap = (obj, fn) => Object.fromEntries( Object.entries(obj).map( ([k, v], i) => [k, fn(v, k, i)] ) ) const myObject = { a: 1, b: 2, c: 3 } console.log(objectMap(myObject, v => 2 * v)) 


Maison # 5

Pourrait utiliser par vous Object.keyset puis forEachsur au tableau retourné des clés: Vous pouvez Object.keysalors utiliser les touches tableau retourné forEach:

var myObject = { 'a': 1, 'b': 2, 'c': 3 },
    newObject = {};
Object.keys(myObject).forEach(function (key) {
    var value = myObject[key];
    newObject[key] = value * value;
});

Ou de façon plus modulaire: manière ou plus modulaire:

function map(obj, callback) {
    var result = {};
    Object.keys(obj).forEach(function (key) {
        result[key] = callback.call(obj, obj[key], key, obj);
    });
    return result;
}

newObject = map(myObject, function(x) { return x * x; });

Cette note est Object.keysrenvoie un un tableau contenant seulement à la propre de l' objet Enumerable les propriétés, se comporte ainsi comme une for..inboucle A avec hasOwnPropertyla vérification. S'il vous plaît noter que Object.keysle tableau peut être énumérait retours d'attributs ne contient que l'objet lui - même, il se comporte comme un hasOwnPropertychèque for..incycle.


Maison # 6

Les méthodes natives non, mais lodash # mapValues par Will faire le travail à la brillante sans méthode native, mais lodash # mapValues peut être du travail bien fait

_.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
// → { 'a': 3, 'b': 6, 'c': 9 }
Les articles originaux publiés 0 · louange gagné 73 · vues 550 000 +

Je suppose que tu aimes

Origine blog.csdn.net/w36680130/article/details/105340527
conseillé
Classement