javascript - 如何在Javascript / Jquery中将键值对添加到数组中
问题描述
我有2个数组如下
var dataSource = [
{location: "France", January: 79, February: 81, March: 23},
{location: "Germany", January: 98, February: 83},
{location: "Japan", January: 96, March: 11} ];
var Months = ["January","February","March"];
我想遍历每个对象并检查 .的每个对象中是否存在dataSource
所有值。如果该值不存在,则将该值添加到value = 100Months
dataSource
dataSource
dataSource
示例:在德国位置,“三月”月份不存在,所以我需要按下键和值March : 100
最后dataSource
应该如下
var dataSource = [
{location: "France", January: 79, February: 81, March: 23},
{location: "Germany", January: 98, February: 83, March: 100},
{location: "Japan", January: 96, February: 100, March: 11} ];
我从以前的线程中尝试了许多解决方案,但没有得到我想要的确切结果。以下是我的一些想法
var dataSource = [
{location: "France", January: 79, February: 81, March: 23},
{location: "Germany", January: 98, February: 83},
{location: "Japan", January: 96, March: 11} ];
var Months = ["January","February","March"];
dataSource.forEach(function(element) {
Months.forEach(function(item) {
if (!(item in element)) {
//Object.assign(dataSource, {item: 100});
//dataSource = {...dataSource, ...{item: 100}}
dataSource.push({item: 100});
}
});
});
console.log(dataSource);
谢谢你的建议。
解决方案
您可以使用Array.map()
来迭代dataSource
数组。使用 internalArray.reduce()
来迭代 Months,并将缺失的月份添加到当前对象:
const dataSource = [{"location":"France","January":79,"February":81,"March":23},{"location":"Germany","January":98,"February":83},{"location":"Japan","January":96,"March":11}];
const Months = ["January","February","March"];
const result = dataSource.map(o =>
Months.reduce((obj, m) => m in obj ? obj : { ...obj, [m]: 100 }, o)
);
console.log(result);
推荐阅读
- javascript - 监听 beforeunload 时 document.activeElement 为空
- r - R:使用 MaxLik() 包估计 mle 时出错
- ios - 如何在 IOS Web 视图中关闭黑屏
- javascript - 出租车票价小部件,带有复选框和预订表格的客户数量下拉列表
- c++ - seek_ptr 每个文件是唯一的吗?
- c - 将文本文件作为 C 中的字符读取时出错
- javascript - createMapping 在 mongoosastic 中不起作用
- c# - blazor 客户端项目应该有哪些 dll?安全问题?
- powerbi - 将字符串“dd/mm/yy HH:mm:ss”更改为可接受的日期/时间格式
- arrays - 将对象添加到反应钩子数组会导致它变为空