如何使用map()编辑数组中对象元素?

5

我有以下内容:

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

我应该通过map()函数编辑对象元素。

例如:我想将所有的age分别设置为68和46。(×2)。

我尝试解决,但我失败了。

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

如果有所影响,你的尝试会改变源数组并仅返回 age 属性。因此,更常规的 map() 使用方式应该是不可变的,比如这个 - Yevhen Horbunkov
1
对于变异方法,您可以将 map() 替换为 forEach() 并使用更合适的工具解决问题。 - Yevhen Horbunkov
7个回答

4

你需要使用一个返回语句,并且使用let因为你的数据实际上是不变的:

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

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


当然可以,但OP要求编辑数组内的对象,更倾向于使用变异操作。 - Anurag Srivastava

1
地图函数将数组中的值替换为您的 lambda 函数返回的结果(在您的情况下是箭头函数)。请确保始终返回一个值 ;)
data = data.map(e => {
      return {..e, age: e.age * 2};
});

1

如果你使用 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);


1

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)


1
在您的map()函数中,修改每个对象的年龄属性,然后返回整个对象:

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

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

console.log(resp)


1

两个小错误:1)您需要在对象值后放置“,”,并且需要一个返回值。

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

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

console.log(data);


已更新为包含整个数组及其年龄的新值。 - DCR

0

尝试使用map

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接