假设我要比较两个数组:
var arrOriginal={currency1: 1234, currency2: 2345};
var arrToCompare={currency1: 123};
我试图找出两者之间的区别。
示例结果:
var result={currency1: 1111, currency2: 2345}
我尝试过的方法:
使用for .. in
然后减去。
for (var key in this.arrOriginal) {
this.result.push({
currency: key,
amount: format.formatCurrency(this.arrToCompare[key] - this.arrOriginal[key])
});
}
但是它不会显示第二个数组没有的货币键。
感谢您的帮助。
答案 0 :(得分:4)
对于对象的undefined
属性,您可以将默认值设置为零。
从内到外:
Object.assign
的参数。
var original = { currency1: 1234, currency2: 2345 },
deltas = { currency1: 123 },
result = Object.assign(
{},
...Object.entries(original).map(([k, v]) => ({ [k]: v - (deltas[k] || 0)}))
);
console.log(result);
答案 1 :(得分:3)
一种非常简单的方法是遍历arrOriginal
的键,如果该键存在于arrToCompare
中,则减去该值,否则不减去。
var arrOriginal={currency1: 1234, currency2: 2345};
var arrToCompare={currency1: 123};
var out = {}
for(var key in arrOriginal){
out[key] = arrOriginal[key] - (arrToCompare[key] || 0)
}
console.log(out)
答案 2 :(得分:1)
您可以使用Object.entries
和reduce
var arrOriginal={currency1: 1234, currency2: 2345};
var arrToCompare={currency1: 123};
let final = Object.entries(arrOriginal).reduce((op,[key,value])=>{
op[key] = value - (arrToCompare[key] || 0)
return op
},{})
console.log(final)
答案 3 :(得分:1)
一种非常容易理解的方法是,使用带有三个分支的if-else语句来检查密钥是否同时存在于两个原始对象或其中一个原始对象中:
const original = { currency1: 1234, currency2: 2345 }
const toCompare = { currency1: 123 }
const result = {}
const allKeys = new Set(Object.keys(original).concat(Object.keys(toCompare)))
allKeys.forEach(k => {
if (k in original && k in toCompare) {
result[k] = original[k] - toCompare[k]
} else if (k in original) {
result[k] = original[k]
} else {
result[k] = toCompare[k]
}
})
console.log(result)