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

标签 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。

你能帮我解决这个问题吗?

谢谢!

最佳答案

使用预期结果作为模板,然后将属性分配给数组 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; }

关于javascript - 将对象与数组中的对象进行比较并替换键匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48926366/

相关文章:

javascript - catch block 不使用 async/await 调用

javascript - 如何将 `this` 传递给 typeahead.js 事件

java - 在链表中存储对象

javascript - 如何使用 Javascript 防止浏览器发出 clang

javascript - 当运算符(operator)下一步调用时主题顺序错误

C++数组元素的构造顺序

python - Matplotlib 3D 震源图,从 .txt 文件中读取 xyz 值

php - 在 foreach 内部运行时遇到格式不正确的数值

Java:无法将 MyClass 分配给对象类型?

Javascript按数组对对象数组进行排序