Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据javascript中对象数组中的id替换特定对象_Javascript_Arrays_Loops_Javascript Objects - Fatal编程技术网

根据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来执行此操作。这是正确的答案。它不会引入不必要的循环来混淆简单的逻辑。