3
votes

Comment modifier le tableau dans un style de programmation fonctionnel?

Comment changer l'arr ['first'] de chaque objet dans un style de programmation fonctionnel en utilisant forEach, map, reduction, filter etc.

let value = 'abc'
let arr = [{
 'first': 'aaa' 
},{
 'first': 'bbb' 
},{
 'first': 'ccc' 
}];


3 commentaires

Qu'est-ce que tu as essayé jusque-là?


Dans un paradigme fonctionnel, vous ne changeriez pas le tableau mais vous en feriez une copie. Cela dit, cela dépend également de ce que vous voudriez même faire exactement - si vous voulez n'opérer que sur le premier élément, vous allez probablement prendre cet élément et travailler avec lui, par opposition à opérer sur le array afin de faire quelque chose uniquement avec le premier élément.


Le changer comment ?


4 Réponses :


0
votes

Voici une manière immuable de mettre à jour la propriété first de chaque élément de votre tableau. Il utilise Array.map () pour créer un nouveau tableau et l'opérateur de propagation pour copier chaque élément et définir la propriété first sur value:

const value = 'abc';

const arr = [{ 'first': 'aaa' },{ 'first': 'bbb' },{ 'first': 'ccc' }];

arr.forEach(item => item.first = value);

console.log(arr);

Si vous souhaitez muter le tableau d'origine , ce qui n'est pas une bonne idée avec le paradigme fonctionnel, utilisez Array.forEach () à la place:

const value = 'abc';

const arr = [{ 'first': 'aaa' },{ 'first': 'bbb' },{ 'first': 'ccc' }];

const newArr = arr.map(item => ({ ...item, first: value }));

console.log(newArr);


0 commentaires

1
votes

Vous pouvez utiliser map et créer un nouveau tableau

let value = 'abc';
let arr = [{
  'first': 'aaa'
}, {
  'first': 'bbb'
}, {
  'first': 'ccc'
}];

let newArr = arr.map(function(item) {

  return {
    first: value
  }

})

console.log(newArr)


0 commentaires

-2
votes

Vous pouvez utiliser forEach et map pour cela, mais la réduction et le filtre ne sont pas conçus pour ce type de fonctionnalité. Vous pouvez en savoir plus ici . J'ai utilisé la fonction Flèche ES6. Si vous ne les connaissez pas et que cela vous semble étrange, lisez-en ici .

MODIFIER

Si vous souhaitez simplement modifier chaque élément de arr . p >

arr.map(item => item.first = value);

Comme @VLAZ l'a suggéré - si vous voulez le faire de manière entièrement fonctionnelle, vous devez créer un nouveau tableau.

arr.forEach(item => {
    item.first = value;
}


1 commentaires

Ce n'est pas très fonctionnel, car vous faites muter le tableau. Et si vous voulez faire cela, alors utiliser .map est inutile, car il fait ce que fait .forEach mais avec plus de surcharge et moins proprement.



0
votes

si je vous comprends bien, vous voulez changer le nom de la clé «en premier» dans chaque objet du tableau en utilisant map?

vous pouvez essayer le code ci-dessous:

const value = 'abc';
const arr = [{
 'first': 'aaa' 
},{
 'first': 'bbb' 
},{
 'first': 'ccc' 
}];

const newArr = arr.map(obj => ({...obj, first: value}));
console.log(newArr);

ou si vous souhaitez modifier uniquement la valeur de first dans chaque obj:

const value = 'abc';
const arr = [{
 'first': 'aaa' 
},{
 'first': 'bbb' 
},{
 'first': 'ccc' 
}];

const newArr = arr.map(obj => {
  if ('first' !== value) {
    Object.defineProperty(obj, value,
        Object.getOwnPropertyDescriptor(obj, 'first'));
    delete obj['first'];
  }
  return obj;
});

console.log(newArr);


0 commentaires