如何以函数式编程风格修改数组?

4

如何使用forEach、map、reduce、filter等函数式编程方式更改每个对象中的arr['first']。

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


你目前尝试了什么? - Anurag Srivastava
2
在函数式编程范式中,你不会改变数组而是制作一个副本。话虽如此,这也取决于你想要做什么 - 如果你只想操作第一个元素,你很可能会取出该元素并对其进行操作,而不是为了仅处理第一个元素而对整个数组进行操作。 - VLAZ
2
改变它怎么做? - Pointy
3个回答

2
这是一种不可变的方法来更新数组中每个项的属性first。它使用Array.map()创建一个新数组,并使用展开运算符复制每个项并将first属性设置为value
Original Answer翻译成"最初的回答"

const value = 'abc';

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

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

console.log(newArr);

如果您想要改变原始数组,虽然这不是函数式编程的好方法,但可以使用 Array.forEach() 代替:

const value = 'abc';

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

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

console.log(arr);


2
你可以使用 map 创建一个新的数组。最初的回答。

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

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

  return {
    first: value
  }

})

console.log(newArr)


0

如果我理解正确的话,您想使用map更改数组中每个对象的键名“first”?

您可以尝试以下代码:

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);

或者如果你只想改变每个对象中第一个值的值:

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

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

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