Javascript 如何在不改变原始数组的情况下更改对象键

Javascript 如何在不改变原始数组的情况下更改对象键,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个对象数组-我想在不改变原始数组的情况下将一个对象键更改为其他对象键。最好的方法是什么 我知道我可以使用Map方法,但不确定这将如何工作。谢谢 const books = [ { title: "To Kill a Mockingbird", writtenBy: "Harper Lee" }, { title: "A Clockwork Orange", author: "Anthony Burgess" }, { title: "The Elephant Tree",

我有一个对象数组-我想在不改变原始数组的情况下将一个对象键更改为其他对象键。最好的方法是什么

我知道我可以使用Map方法,但不确定这将如何工作。谢谢

const books = [
  { title: "To Kill a Mockingbird", writtenBy: "Harper Lee" }, 
  { title: "A Clockwork Orange",  author: "Anthony Burgess" },
  { title: "The Elephant Tree", writtenBy: "R.D. Ronald" } 
]

function changeKey(arr, keyChange, newKey) {

}

// i want to return so the KEY keyChange(author) is changed to newKey(writtenBy)
[
 { title: "To Kill a Mockingbird", writtenBy: "Harper Lee" },
 { title: "A Clockwork Orange",  writtenBy: "Anthony Burgess" },
 { title: "The Elephant Tree", writtenBy: "R.D. Ronald" } 
]

以下内容将不会变异
书籍
数组

const book=[
{标题:“杀死一只知更鸟”,作者:“哈珀·李”},
{标题:“发条橙”,作者:“安东尼·伯吉斯”},
{标题:“大象树”,作者:“R.D.罗纳德”}
];
const renamedBooks=books.map(book=>{
如果(书的作者){
返回{
书名:book.title,
作者
};
}
还书;
});

控制台信息(重命名的图书)以下内容不会变异
书籍
数组

const book=[
{标题:“杀死一只知更鸟”,作者:“哈珀·李”},
{标题:“发条橙”,作者:“安东尼·伯吉斯”},
{标题:“大象树”,作者:“R.D.罗纳德”}
];
const renamedBooks=books.map(book=>{
如果(书的作者){
返回{
书名:book.title,
作者
};
}
还书;
});

控制台信息(重命名的图书)
您可以
映射
参数数组,并使用spread操作符粗略地复制其中的每个对象。对于每个新对象,如果它包含我们要删除的键,则将该值复制到新键,然后
删除
旧键

const books=[{title:“杀死一只知更鸟”,writenby:“Harper Lee”},{title:“发条橙”,作者:“Anthony Burgess”},{title:“大象树”,writenby:“R.D.Ronald”}];
常量更改键=(arr,keyChange,newKey)=>
arr.map(e=>{
常数o={…e};
if(o中的键更改){
o[newKey]=o[keyChange];
删除o[keyChange];
}
返回o;
})
;
console.log(changeKey(图书,“作者”,“编写者”));

控制台。日志(书籍)
您可以
映射
参数数组,并使用spread操作符粗略地复制其中的每个对象。对于每个新对象,如果它包含我们要删除的键,则将该值复制到新键,然后
删除
旧键

const books=[{title:“杀死一只知更鸟”,writenby:“Harper Lee”},{title:“发条橙”,作者:“Anthony Burgess”},{title:“大象树”,writenby:“R.D.Ronald”}];
常量更改键=(arr,keyChange,newKey)=>
arr.map(e=>{
常数o={…e};
if(o中的键更改){
o[newKey]=o[keyChange];
删除o[keyChange];
}
返回o;
})
;
console.log(changeKey(图书,“作者”,“编写者”));

控制台。日志(书籍)像map、filter、reduce等数组帮助程序不会改变原始数组,而是返回一个新数组。Map接收一个函数作为参数(回调)。映射迭代在每个元素中应用回调的数组

const books=[{title:“杀死一只知更鸟”,作者:“Harper Lee”},
{标题:“发条橙”,作者:“安东尼·伯吉斯”},
{标题:“大象树”,作者:“R.D.罗纳德”};
//函数用作映射上的回调函数
功能转换键(当前){
if(current.author)返回{title:current.title,writenby:current.author};
回流;
}
//由于map,在每个元素中应用changeKey创建新数组
const newBooks=books.map(changeKey);

控制台日志(newBooks)像map、filter、reduce等数组帮助程序不会改变原始数组,而是返回一个新数组。Map接收一个函数作为参数(回调)。映射迭代在每个元素中应用回调的数组

const books=[{title:“杀死一只知更鸟”,作者:“Harper Lee”},
{标题:“发条橙”,作者:“安东尼·伯吉斯”},
{标题:“大象树”,作者:“R.D.罗纳德”};
//函数用作映射上的回调函数
功能转换键(当前){
if(current.author)返回{title:current.title,writenby:current.author};
回流;
}
//由于map,在每个元素中应用changeKey创建新数组
const newBooks=books.map(changeKey);

控制台日志(newBooks)可能重复的不确定我是否理解这个问题:
books
作为常量数组在这个问题中是100%不相关的,因为您想更改其中一个包含的对象中的字段,所以。。。就换一下吧
let e=books.find(……);e、 writenby=e.author;删除电子作者完成了吗?(使用该函数,如果您需要在每个元素上运行它,
forEach
应该可以避免使用
find()
)不确定我是否理解这个问题的可能重复:
books
作为常量数组在这个问题上是100%不相关的,因为您想更改其中一个包含的对象中的字段,所以。。。就换一下吧
let e=books.find(……);e、 writenby=e.author;删除电子作者完成了吗?(使用该函数,如果需要在每个元素上运行它,
forEach
应该可以避免使用
find()
)这有点奇怪,因为它不会创建没有作者密钥的对象副本。它们不会在changeKey中更改,因此它确实正确地回答了问题,但是如果它们在仍然是同一个对象之后更改。例如,
删除新书[0]。标题;console.log(books[0])这有点奇怪,因为它不会创建没有作者密钥的对象副本。它们不会在changeKey中更改,因此它确实正确地回答了问题,但是如果它们在仍然是同一个对象之后更改。例如,
删除新书[0]。标题;console.log(books[0])这有点奇怪,因为它不会创建没有作者密钥的对象副本。它们不会在changeKey中更改,因此它确实正确地回答了问题,但是如果它们在