有關(guān)js的雙向綁定解除方法
最近碰到了一個(gè)bug
var persons = [{ number: 1, age: 11, name: "wanghaha", money: -1 }, { number: 2, age: 12, name: "王一一", money: -3 }, { number: 3, age: 13, name: "王三十", money: 4 }];
var per_con = [];
for (var i = persons.length; i > 0; i--) {
if (persons[i-1].money > 0) {
per_con.push(persons[i-1]);
}
}
console.log("111"+persons);
console.log("222"+per_con);
var pp = { number: 0, age: 0, name: "", money: 0 };
persons.push(pp);
for (var i = persons.length; i > 0; i--) {
if (persons[i - 1].number > 2) {
persons[i].number += 1;
persons[i].age = persons[i - 1].age;
persons[i].name = persons[i - 1].name;
persons[i].money = persons[i - 1].money;
}
if (persons[i - 1].number == 2) {
persons[i].number = 2;
persons[i].age = 100;
persons[i].name = "王插隊(duì)";
persons[i].money = -90;
}
}
console.log("333"+persons);
console.log("444"+per_con);
結(jié)果:
console.log("111"+persons);
0: {number: 1, age: 11, name: "wanghaha", money: -1}
1: {number: 2, age: 12, name: "王一一", money: -3}
2: {number: 3, age: 13, name: "王三十", money: 4}
console.log("222"+per_con);
0: {number: 3, age: 13, name: "王三十", money: 4}
console.log("333"+persons);
0: {number: 1, age: 11, name: "wanghaha", money: -1}
1: {number: 2, age: 12, name: "王一一", money: -3}
2: {number: 2, age: 100, name: "王插隊(duì)", money: -90}
3: {number: 1, age: 13, name: "王三十", money: 4}
console.log("444"+per_con);
0: {number: 2, age: 100, name: "王插隊(duì)", money: -90}
看得出來(lái):per_con的值因?yàn)榻壎〝?shù)據(jù)發(fā)生了變化,相當(dāng)于只保留了persons[2]
問(wèn)題出在per_con.push(persons[i-1]);
解決方法1:解除綁定
per_con.push(persons[i-1]);替換成per_con.push(JSON.parse(JSON.stringify(persons[i-1])));
console.log("444"+per_con);
0: {number: 3, age: 13, name: "王三十", money: 4}
解決方法1:替換綁定
function extend(o,p){
for(index in p){
o[index] = p[index];
}
return(o);
}
var persons = [{ number: 1, age: 11, name: "wanghaha", money: -1 }, { number: 2, age: 12, name: "王一一", money: -3 }, { number: 3, age: 13, name: "王三十", money: 4 }];
var per_con = [];
for (var i = persons.length; i > 0; i--) {
if (persons[i-1].money > 0) {
var p = {};
extend(p , persons[i-1]);
per_con.push(p);
}
}
console.log("111"+persons);
console.log("222"+per_con);
var pp = { number: 0, age: 0, name: "", money: 0 };
persons.push(pp);
for (var i = persons.length; i > 0; i--) {
if (persons[i - 1].number > 2) {
persons[i].number += 1;
persons[i].age = persons[i - 1].age;
persons[i].name = persons[i - 1].name;
persons[i].money = persons[i - 1].money;
}
if (persons[i - 1].number == 2) {
persons[i].number = 2;
persons[i].age = 100;
persons[i].name = "王插隊(duì)";
persons[i].money = -90;
}
}
console.log("333"+persons);
console.log("444"+per_con);
添加替換函數(shù)
function extend(o,p){
for(index in p){
o[index] = p[index];
}
return(o);
}
per_con.push(persons[i-1]);替換成
var p = {};
extend(p , persons[i-1]);
per_con.push(p);
也成功解決
console.log("444"+per_con);
0: {number: 3, age: 13, name: "王三十", money: 4}
浙公網(wǎng)安備 33010602011771號(hào)