Javascript 如何有条件地检查对象值是否设置或等于smth并跟踪更改?
我不知道如何缩短这段代码,我还需要检查和跟踪许多其他值,因此代码变得庞大而复杂Javascript 如何有条件地检查对象值是否设置或等于smth并跟踪更改?,javascript,node.js,Javascript,Node.js,我不知道如何缩短这段代码,我还需要检查和跟踪许多其他值,因此代码变得庞大而复杂 doc.name = doc.name === offer.title ? doc.name : () => { shouldUpdate = true ; return offer.title }; doc.uri = doc.uri ? doc.uri : () => { shouldUpdate = true; return encode
doc.name = doc.name === offer.title
? doc.name
: () => {
shouldUpdate = true ;
return offer.title
};
doc.uri = doc.uri
? doc.uri
: () => {
shouldUpdate = true;
return encodeURI(offer.title)
};
doc.info = doc.info
? doc.info
: () => {
shouldUpdate = true;
return {
activation: offer.activation,
image: offer.image
};
};
对于
doc.uri
和doc.info
m,可以使用它自身的值,也可以使用函数
doc.uri = doc.uri
|| () => {
shouldUpdate = true;
return encodeURI(offer.title)
};
doc.info = doc.info
|| () => {
shouldUpdate = true;
return {
activation: offer.activation,
image: offer.image
};
};
您可以使用将doc.uri
和doc.info
分配转换为:
doc.uri = doc.uri || () => {shouldUpdate = true; return encodeURI(offer.title)};
doc.info = doc.info || () => {shouldUpdate = true; return {
activation: offer.activation,
image: offer.image
}};
此函数将比较相同类型的这两个对象中的所有属性。 在功能
takeAction
中,它将采取适当的操作。也许可以做得更好,但我觉得它更可读
let a={name:'same',uri:'samee',info:'not same'};
常量b={name:'same',uri:'samee',info:'same'};
a名称(a,b);
控制台日志(a,b);
函数名称(a,b){
const-aKeys=Object.keys(a);
用于(让aKeys的键){
如果(a[键]!==b[键]){
//shouldUpdate=true;
采取行动(a、b、键)
}
}
}
功能动作(a、b、键){
开关(钥匙){
案例“名称”:{
a、 name=b.name;
文件。填写(‘名称已采取的行动’);
打破
}
案例“uri”:{
//解析uri
a、 uri=b.uri;
document.write(“已采取的uri操作”);
打破
}
案例“信息”:{
//激活:offer.activation,
//图片:offer.image
文件。填写(“已采取的信息行动”);
打破
}
}
}
你可以让事情变得更糟,用逗号,看
doc.name = doc.name === offer.title ? doc.name : (shouldUpdate = true, offer.title);
doc.uri = doc.uri || (shouldUpdate = true, encodeURI(offer.title));
doc.info = doc.info || (shouldUpdate = true, {
activation: offer.activation,
image: offer.image
});
您可能希望将此移到,因为它更适合您的要求。是的,一般来说,我知道这一点,但它没有多大帮助,重复
shouldUpdate=true代码>将保留,但无论如何还是要感谢您