如果没有,如何比较2个数组并添加键

时间:2019-08-13 10:59:54

标签: javascript arrays typescript

假设我要比较两个数组:

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])
  });
}

但是它不会显示第二个数组没有的货币键。

感谢您的帮助。

4 个答案:

答案 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.entriesreduce

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)