Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 如何有条件地检查对象值是否设置或等于smth并跟踪更改?_Javascript_Node.js - Fatal编程技术网

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将保留,但无论如何还是要感谢您