将对象与数组中的对象进行比较,并替换键匹配的值

时间:2018-02-22 11:31:38

标签: javascript arrays object compare

我有一个对象和一个对象数组。我想比较数组中的所有对象与单个硬编码对象,然后替换对象属性匹配的一些值。

单个硬编码对象描述完整数据集在正确时的外观。每个属性的值都为null。 如果属性与单个属性中的任何属性匹配,则此值应替换为数组中任何对象的值。

// single object (hard coded)

var completeDataSet = {
  jan: null,
  jan;prognosis: null,
  feb: null,
  feb;prognosis: null,
  mar: null,
  mar;prognosis: null,
  apr: null,
  apr;prognosis: null,
  may: null,
  may;prognosis: null,
  jun: null,
  jun;prognosis: null,
  jul: null,
  jul;prognosis: null,
  aug: null,
  aug;prognosis: null,
  sep: null,
  sep;prognosis: null,
  oct: null,
  oct;prognosis: null,
  nov: null,
  nov;prognosis: null,
  dec: null,
  dec;prognosis: null
}

对象数组看起来像这样:

//Array of objects with missing properties
var data = [{
  jan: 0.258,
  jan;prognosis: false,
  feb: 15.256,
  feb;prognosis: false,
  apr: 0.0156,
  apr;prognosis: true,
  oct: 1.235,
  oct;prognosis: true,
  nov: 3.587,
  nov;prognosis: false
},{
  feb: 12.154,
  feb;prognosis: true,
  apr: 1.015,
  apr;prognosis: true,
  sep: 0.235,
  sep;prognosis: false,
  oct: 15.201,
  oct;prognosis: true,
  nov: 12.158,
  nov;prognosis: false,
  dec: 125.152,
  dec;prognosis: true
}];

我希望最终结果看起来像这样:

var correctArrayOfData = [{
  jan: 0.258,
  jan;prognosis: false,
  feb: 15.256,
  feb;prognosis: false,
  mar: null,
  mar;prognosis: null,
  apr: 0.0156,
  apr;prognosis: true,
  may: null,
  may;prognosis: null,
  jun: null,
  jun;prognosis: null,
  jul: null,
  jul;prognosis: null,
  aug: null,
  aug;prognosis: null,
  sep: null,
  sep;prognosis: null,
  oct: 1.235,
  oct;prognosis: true,
  nov: 3.587,
  nov;prognosis: false,
  dec: null,
  dec;prognosis: null
},{
  jan: null,
  jan;prognosis: null,
  feb: 12.154,
  feb;prognosis: true,
  mar: null,
  mar;prognosis: null,
  apr: 1.015,
  apr;prognosis: true,
  may: null,
  may;prognosis: null,
  jun: null,
  jun;prognosis: null,
  jul: null,
  jul;prognosis: null,
  aug: null,
  aug;prognosis: null,
  sep: 0.235,
  sep;prognosis: false,
  oct: 15.201,
  oct;prognosis: true,
  nov: 12.158,
  nov;prognosis: false,
  dec: 125.152,
  dec;prognosis: true
}]

正如您所看到的,如果密钥匹配,我已填写了值,并将不匹配的props和值保留为null。

请你帮我解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:2)

将预期结果用作模板,然后将属性分配给数组correctArrayOfData



var data = [{  jan: 0.258,  'jan;prognosis': false,  feb: 15.256,  'feb;prognosis': false,  apr: 0.0156,  'apr;prognosis': true,  oct: 1.235,  'oct;prognosis': true,  nov: 3.587,  'nov;prognosis': false},{  feb: 12.154,  'feb;prognosis': true,  apr: 1.015,  'apr;prognosis': true,  sep: 0.235,  'sep;prognosis': false,  oct: 15.201,  'oct;prognosis': true,  nov: 12.158,  'nov;prognosis': false,  dec: 125.152,  'dec;prognosis': true}];
var template = {  jan: null,  'jan;prognosis': null,  feb: null,  'feb;prognosis': null,  mar: null,  'mar;prognosis': null,  apr: null,  'apr;prognosis': null,  may: null,  'may;prognosis': null,  jun: null,  'jun;prognosis': null,  jul: null,  'jul;prognosis': null,  aug: null,  'aug;prognosis': null,  sep: null,  'sep;prognosis': null,  oct: null,  'oct;prognosis': null,  nov: null,  'nov;prognosis': null,  dec: null,  'dec;prognosis': null};

var correctArrayOfData = data.map(o => Object.assign(Object.assign({}, template), o));
console.log(correctArrayOfData);

.as-console-wrapper { max-height: 100% !important; top: 0; }