根据javascript中对象数组中的id替换特定对象
我有一个像这样的对象数组根据javascript中对象数组中的id替换特定对象,javascript,arrays,loops,javascript-objects,Javascript,Arrays,Loops,Javascript Objects,我有一个像这样的对象数组 var books = [{ id : 1, name : 'Name of the wind', year : 2015, rating : 4.5, author : 2}]; 现在我有了一个函数editBooks,它要求用户输入一个id,并用用户给定的值替换具有相同id的图书。 比如说 function editBooks(name,author,year,rating,id) 如何根据用户提供的id替换books数组中对象的内容?请尝试下面的代码片段 fun
var books = [{
id : 1,
name : 'Name of the wind',
year : 2015,
rating : 4.5,
author : 2}];
现在我有了一个函数editBooks,它要求用户输入一个id,并用用户给定的值替换具有相同id的图书。
比如说
function editBooks(name,author,year,rating,id)
如何根据用户提供的id替换books数组中对象的内容?请尝试下面的代码片段
function editBooks(name,author,year,rating,id) {
var found = false;
books.forEach(function(book) {
if(book.id == id) {
book.name = name;
book.year = year ;
book.author = author;
book.rating = rating;
found = true;
}
});
return found; // if found is false, then you can insert new book
}
您可以将对象作为参数传递给函数,并在循环中使用
for…来更新具有相同id的对象(如果找到)
VarBooks=[{id:1,名字:'风的名字',年份:2015,评级:4.5,作者:2}];
功能编辑手册(obj){
书籍。forEach(函数(e){
if(obj.id&&obj.id==e.id){
对于(obj中的var i)e[i]=obj[i]
}
})
}
editBooks({id:1,名称:'新名称',作者:22})
console.log(books)
您可以搜索id
并使用该书进行更新。如果找不到书本,则生成新条目
功能编辑手册(姓名、作者、年份、等级、id){
var book=books.find(b=>b.id==id);
如果(书){
book.name=名称;
book.author=作者,
book.year=年;
账面评级=评级;
}否则{
books.push({id,name,author,year,rating});
}
}
var books=[{id:1,名称:“风的名字”,年份:2015,评级:4.5,作者:2}];
editBooks('Foo',2017,3.3,5,1);
编辑书籍('bar',2016,1,2,2);
控制台。日志(书籍)代码>最好传递一个仅包含更改的对象(仅包含一个或多个要更改其值的属性的对象)
一般来说,您可以简单地执行以下操作:
var books=[{id:1,名称:“风的名字”,年份:2015,评级:4.5,作者:2},{id:2,名称:“河流守卫”,年份:2016,评级:6.5,作者:“约翰·多伊”}];
Object.assign(books.find(b=>b.id==2),{author:“Jane Doe”});
控制台。日志(书籍)代码>
仅更新更改的值
如果新书的id不存在,并且新书已存在,则将添加新书
未定义值这些值被设置为未定义
var书籍=[
{
id:1,
名字:'风的名字',
年份:2015年,
评级:4.5,
作者:2},
{id:2,
名称:'2'的名称,
年份:2015年,
评级:4.5,
作者:2},
{id:3,
名称:'3'的名称,
年份:2015年,
评级:4.5,
作者:2}
];
功能编辑书籍(书籍、id、姓名、年份、评级、作者){
const update=book=>Object.assign(book,{id:book.id,name:name | | book.name,year:year | | book.year,rating:rating | | book.rating,author:author | | book.author});
let details=books.find((book)=>{return book.id==id});
详细信息?更新(详细信息):books.push({id,name,year,rating,author});
};
//如果存在,请编辑
编辑书籍(书籍,2,“更新标题”,“1985”);
//如果id不存在,则添加
editBooks(图书,4,《全新书名》,2015年);
控制台日志(书籍)
.as控制台包装{max height:100%!important;top:0;}
按ID搜索对象并更新内容。您可以使用下划线JS来执行此操作。@主脑不需要下划线.JS来执行此操作。这是正确的答案。它不会引入不必要的循环来混淆简单的逻辑。