J'ai un tableau d'objets comme suit:
var obj = [
{a: 1, b: 5, c: 9},
{a: 2, b: 6, c: 10},
{a: 3, b: 7, c: 11},
{a: 4, b: 8, c: 12}
];
Je sais comment obtenir un seul objet en utilisant Array.map()
comme ceci.
var result = obj.map(x=>x.a)
Cela me donnera le résultat suivant
[1, 2, 3, 4]
Mais je veux un résultat comme suit:
[
{a: 1, b: 5},
{a: 2, b: 6},
{a: 3, b: 7},
{a: 4, b: 8}
]
inshorté à partir d'un tableau d'objets, je souhaite sélectionner seulement quelques champs (plus d'un)
comment faire ça ?
Dans votre solution pour produire [1,2,3,4]
, x.a
n'est pas une micro-syntaxe, c'est en fait une expression JavaScript à part entière. Vous pouvez donc simplement le remplacer par le JavaScript pour créer un nouvel objet avec les propriétés que vous souhaitez.
var result = obj.map(x=>{a: x.a, b: x.b});
... presque. La complication supplémentaire est qu'un {
après un =>
est interprété comme le début d'un corps de fonction et non comme le début d'un littéral d'objet. Vous pouvez éviter cela en enveloppant simplement le littéral objet entre parenthèses sinon noop.
var result = obj.map(x=>({a: x.a, b: x.b}));
Vous pouvez créer votre propre fonction personnalisée pour cela et lui passer un ensemble de propriétés que vous souhaitez extraire. :
var array = [{a:1,b:5,c:9}, {a:2,b:6,c:10}, {a:3,b:7,c:11}, {a:4,b:8,c:12} ];
function extractProperties(arr, properties){
return arr.map((obj)=> Object.keys(obj).reduce((acc,key)=>{
if(properties.has(key))
acc[key] = obj[key];
return acc;
},{}));
}
let set = new Set(["a","b"]);
let result = extractProperties(array, set);
console.log(result);
set.add("c");
console.log("**************result2**********")
let result2 = extractProperties(array, set);
console.log(result2);
Vous pouvez renvoyer un objet personnalisé avec les propriétés requises à l'aide de map()
var obj = [{a:1,b:5,c:9},
{a:2,b:6,c:10},
{a:3,b:7,c:11},
{a:4,b:8,c:12}
];
let op = obj.map(e => {
return { a:e.a, b: e.b };
})
console.log(op);