数组里存放的是对象,数据发生变化,会有新的对象过来,这时候数组就得判断是添加还是修改了,有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);
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)
}