数组添加问题求解,要同时判断是修改还是添加!

数组里存放的是对象,数据发生变化,会有新的对象过来,这时候数组就得判断是添加还是修改了,有id相同就修改,没有id相同的就添加到数组中去。
例如:


var arr1 = [{id:"3",name:"3"},{id:"1",name:"1"},{id:"2",name:"2"}];
   //发生数据变化,来了两次数据var a = {id:"2",name:"3"}      a ={id:"4",name:"4"}
   for (var i = 0; i < arr1.length; i++) {
    if(arr1[i].id==a.id){
     arr1[i].name = a.name;
    }else{
     //如果是第一次的数据过来,数组发生修改操作,会走两次else分支
     //如果是第二次的数据过来,数组发生添加操作,会走三次else分支
     //这里我写continue;或者arr1.push();都不对,请求大佬支援
    }
   }

题主要的代码如下,有帮助麻烦点个采纳【本回答右上角】,谢谢~~



    function updateArray(arr1, item) {
        var index = arr1.findIndex(i => i.id == item.id);
        if (index == -1) arr1.push(item);//不存在压入
        else arr1[index] = item;//存在替换对应的项
    }
    var arr1 = [{ id: "3", name: "3" }, { id: "1", name: "1" }, { id: "2", name: "2" }];
    updateArray(arr1, { id: "2", name: "3" });
    console.log(JSON.stringify(arr1))//[{"id":"3","name":"3"},{"id":"1","name":"1"},{"id":"2","name":"3"}]
    updateArray(arr1, { id: "4", name: "4" });
    console.log(JSON.stringify(arr1))//[{"id":"3","name":"3"},{"id":"1","name":"1"},{"id":"2","name":"3"},{"id":"4","name":"4"}]

你用filter做会很快。

var arr1 = [{id:"3",name:"3"},{id:"1",name:"1"},{id:"2",name:"2"}];
console.log(arr1.filter(item=>item.id==3))

你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)

var arr1 = [{id:"3",name:"3"},{id:"1",name:"1"},{id:"2",name:"2"}];

function updateArr(obj) {
    var flag = false;  //设置一个是否有相同id的标志
    for (var i = 0; i < arr1.length; i++) {
        if(arr1[i].id==obj.id){
            flag = true;  //找到有相同id,就把标志赋值的true
             arr1[i].name = obj.name;
        }
    }
    if (flag == false) //当循环结束都没有找到相同id,就添加到数组中去
        arr1.push(obj);
}
var a = {id:"2",name:"3"}, b ={id:"4",name:"4"};
updateArr(a);
updateArr(b);
console.log(arr1);

img


var arr1 = [{id:"3",name:"3"},{id:"1",name:"1"},{id:"2",name:"2"}];
var a = {id:"2",name:"3"};
var item = arr1.find(item => item.id == a.id);
if(item) {
    item.name = a.name;
}else {
    arr1.push(a);
}

按照楼主的逻辑写的

var arr1 = [{id:"3",name:"3"},{id:"1",name:"1"},{id:"2",name:"2"}];
   var a = {id:"2",name:"3"}  
   var b = 0  
   for (var i = 0; i < arr1.length; i++) {
    if(arr1[i].id==a.id){
     arr1[i].name = a.name;
     b=1
     break;
    }
   }
   if(b === 0){
     arr1.push(a)
   }