Babel.js 使用.map()将新属性添加到数组中存在的Object

ecr0jaav  于 2022-12-08  发布在  Babel
关注(0)|答案(2)|浏览(160)

我尝试使用.map()有条件地向数组中的对象添加一个属性,但似乎遗漏了一些东西。Map完成后,对象数组保持不变。所有这些都是尝试解决ESLint错误“no-param-reassign”的结果,如果这有助于理解我这样做的原因的话。
我已经做了一个基本的例子来说明我在这里要完成的工作:jsfiddle

var aList = [{
    Title: "Enders Game",
    Rating: 8
  },
  {
    Title: "Harry Potter",
    Rating: 10
  }];

console.log('before', aList);

aList.map(function(book) {
    if(book.Title == "Enders Game"){
    console.log({ ...book, completed: true })
    return { ...book, completed: true };
  }
  console.log({ ...book, completed: false })
  return { ...book, completed: false };
});

console.log('after', aList);
shyt4zoc

shyt4zoc1#

您可以使用Array#forEach,因为您没有使用Array#map的结果。
第一个
对于一个全新的数组,你可以使用Array#mapuse它的结果。对于添加一个新的属性到一个对象,你可以使用Object.assign,它变异并返回对象的第一个参数。
第一次

jvidinwx

jvidinwx2#

我想,这样写起来会干净得多,可读性也强得多。

const aList = [{ Title: 'Enders Game', Rating: 8 }, { Title: 'Harry Potter', Rating: 10 }];
  const newList = aList.map((book) => (
    {
      ...book,
      completed: book.Title === 'Enders Game',
    }));

相关问题