Javascript 如果don';我没有

Javascript 如果don';我没有,javascript,arrays,typescript,Javascript,Arrays,Typescript,假设我有两个数组要比较: var arrOriginal={currency1: 1234, currency2: 2345}; var arrToCompare={currency1: 123}; 我试图找出两者之间的区别 示例结果: var result={currency1: 1111, currency2: 2345} 我所尝试的: 将用于。。在中,然后减去 for (var key in this.arrOriginal) { this.result.push({ cu

假设我有两个数组要比较:

var arrOriginal={currency1: 1234, currency2: 2345};
var arrToCompare={currency1: 123};
我试图找出两者之间的区别

示例结果:

var result={currency1: 1111, currency2: 2345}
我所尝试的: 将
用于。。在
中,然后减去

for (var key in this.arrOriginal) {
  this.result.push({
    currency: key,
    amount: format.formatCurrency(this.arrToCompare[key] - this.arrOriginal[key])
  });
}
但是它不会显示第二个数组没有的货币密钥


非常感谢您的帮助。

您可以为对象的
未定义的属性设置默认值零

由内而外:

  • 以键/值对数组的形式从对象中获取条目
  • 映射此条目并获得一个具有键和值的对象,该值与另一个对象的对应值之差或为零
  • 将对象作为的参数展开
  • 并从映射中获取包含所有对象的新对象
var original={currency1:1234,currency2:2345},
Delta={currency1:123},
结果=Object.assign(
{},
…Object.entries(original.map)([k,v])=>({[k]:v-(delta[k]| | 0}))
);

控制台日志(结果)
一种非常简单的方法是在原始
键上循环,如果该键出现在
arrToCompare
中,则减去该值,否则不减去

for (var key in this.arrOriginal) {
  this.result.push({
    currency: key,
    amount: format.formatCurrency(this.arrToCompare[key] - this.arrOriginal[key])
  });
}
var arrOriginal={currency1:1234,currency2:2345};
var arrToCompare={currency1:123};
var out={}
for(原始中的var键){
out[key]=原始[key]-(arrToCompare[key]| | 0)
}

console.log(out)
您可以使用
Object.entries
reduce

var arrOriginal={currency1:1234,currency2:2345};
var arrToCompare={currency1:123};
让final=Object.entries(arrOriginal).reduce((op,[key,value])=>{
op[key]=值-(arrToCompare[key]| | 0)
返回操作
},{})

console.log(final)
一种非常容易理解的方法是使用一个if-else语句,其中包含三个分支,用于检查键是否同时存在于两个或其中一个原始对象中:

const original={currency1:1234,currency2:2345}
常量toCompare={currency1:123}
常量结果={}
const allKeys=new Set(Object.keys(original).concat(Object.keys(toCompare)))
allKeys.forEach(k=>{
if(原件中的k和副本中的k){
结果[k]=原始[k]-比较[k]
}否则,如果(原件中的k){
结果[k]=原始[k]
}否则{
结果[k]=toCompare[k]
}
})
console.log(结果)