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.map
celle utilisée serait la suivante: Je cherche est similaire à des Array.prototype.map
mé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 map
fonction pour les objets? JavaScript si cet objet map
fonction? (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 function
n'existe pas à l'ON Object.prototype
comme bon vous semble donc il peut Emuler map function
en Object.prototype
n'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 this
contexte dans le rappel, le Tout comme à la Array
méthode ,. Note: Cette version vous permet également de ( en option) définir la fonction de rappel this
contexte, tout de Array
la 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 map
ON à l'objet. Modifier - Modifier la suppression de Object.prototype
son nom ne soit pas associé à une utilisation existante sur l'objet pour faire en sorte que les map
propriétés des conflits .
# 4 étage
Des autochtones ne y map
au L' Object
objet, mais comment le propos du présent: ne pas l' Object
objet 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 ... in
les 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.reduce
réduit un tableau à une seule valeur par fusion quelque peu la valeur précédente avec le courant. Array.prototype.reduce
En 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 myObject
est ajouté avec comme au deux fois à la valeur de clé. A chaque itération, ajoutera la myObject
valeur 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.keys
et puis forEach
sur au tableau retourné des clés: Vous pouvez Object.keys
alors 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.keys
renvoie un un tableau contenant seulement à la propre de l' objet Enumerable les propriétés, se comporte ainsi comme une for..in
boucle A avec hasOwnProperty
la vérification. S'il vous plaît noter que Object.keys
le tableau peut être énumérait retours d'attributs ne contient que l'objet lui - même, il se comporte comme un hasOwnProperty
chèque for..in
cycle.
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 }