algo
algo

Reputation: 53

How to use map() for editing object elements inside array?

I have the following:

const data = [
  { name: "Santa"
    age: 34
  },
  { name: "John"
    age: 23
  }
]

I should edit object elements through map().
For example: I want all age to be 68 and 46 relatively. (×2).

I tried to solve but I couldn't

data = data.map(e => {
      e.age *= 2;
});

Upvotes: 5

Views: 577

Answers (7)

M A Salman
M A Salman

Reputation: 3820

Your logic will be correct if you return e;

data = data.map(e =>{e.age *= 2; return e})

let data = [
  { name: "Santa",
    age: 34
  },
  { name: "John",
    age: 23
  }
]

data = data.map(e =>{e.age *= 2; return e})
console.log(data);

Upvotes: 1

Anurag Srivastava
Anurag Srivastava

Reputation: 14433

You need use a return statement, also use let because your data is not in fact constant:

let data = [{
    name: "Santa",
    age: 34
  },
  {
    name: "John",
    age: 23
  }
]

data = data.map(e => {e.age *= 2; return e;});
console.log(data)

Upvotes: 4

DCR
DCR

Reputation: 15698

two small mistakes: 1) you need to place ',' after object values and you need a return

var data = [
  { name: "Santa",
    age: 34
  },
  { name: "John",
    age: 23
  }
]

 data.map(e=> {
      e.age *= 2;
});

console.log(data);

Upvotes: 1

symlink
symlink

Reputation: 12218

In your map() function, alter the age property of each object, then return the entire object:

const data = [
  { name: "Santa",
    age: 34
  },
  { name: "John",
    age: 23
  }
]

let resp = data.map(obj => {
      obj.age *= 2
      return obj
});

console.log(resp)

Upvotes: 1

xdeepakv
xdeepakv

Reputation: 8135

const data = [
  { name: "Santa", age: 34 },
  { name: "John", age: 23 }
];
console.log( data.map( item => ({
  ...item,
  age: item.age + 10 // modify here
})))
data.forEach( item => {
  item.age = item.age + 10 // modify direct object
})
console.log( data)

Upvotes: 1

Ghoul Ahmed
Ghoul Ahmed

Reputation: 4836

Try with map

const data = [ { name: "Santa", age: 34 }, { name: "John", age: 23 }]
   
console.log(data.map(res=>({...res, age: res.age*2})))

Upvotes: 0

michmich112
michmich112

Reputation: 774

The map function replaces the value in the array with the result returned by your lambda function (in your case your arrow function). Always make sure you return a value ;)

data = data.map(e => {
      return {..e, age: e.age * 2};
});

Upvotes: 1

Related Questions