Javascript 比较两个数组并在JS中添加缺少的对象
我有两个大数组,我想比较两个数组,并将缺少的数据从arrayOne添加到arrayTwo 这是我的一些数据Javascript 比较两个数组并在JS中添加缺少的对象,javascript,arrays,json,multidimensional-array,ecmascript-6,Javascript,Arrays,Json,Multidimensional Array,Ecmascript 6,我有两个大数组,我想比较两个数组,并将缺少的数据从arrayOne添加到arrayTwo 这是我的一些数据 const arrayOne = [ { id: "This Year", data: [ { x: "01-02", y: "81" }, { x: "01-03", y: "361" }, { x: "01-04", y: "64" }, { x: "01-05", y: "169" }, { x: "01
const arrayOne = [
{
id: "This Year",
data: [
{ x: "01-02", y: "81" },
{ x: "01-03", y: "361" },
{ x: "01-04", y: "64" },
{ x: "01-05", y: "169" },
{ x: "01-06", y: "9" },
{ x: "01-07", y: "100" },
{ x: "01-08", y: "144" },
{ x: "01-09", y: "81" },
{ x: "01-10", y: "256" },
{ x: "01-11", y: "81" },
{ x: "01-12", y: "144" },
{ x: "01-13", y: "144" },
{ x: "01-14", y: "225" },
{ x: "01-15", y: "289" },
{ x: "01-16", y: "81" },
{ x: "01-17", y: "64" },
{ x: "01-18", y: "64" },
{ x: "01-19", y: "121" },
{ x: "01-20", y: "25" },
{ x: "01-21", y: "49" },
{ x: "01-22", y: "16" },
{ x: "01-23", y: "49" },
{ x: "01-24", y: "196" },
{ x: "01-25", y: "16" },
{ x: "01-26", y: "25" },
{ x: "01-27", y: null },
{ x: "01-28", y: "144" },
{ x: "01-29", y: "100" },
{ x: "01-30", y: "64" },
{ x: "01-31", y: "144" },
{ x: "02-01", y: "100" },
{ x: "02-02", y: "100" },
{ x: "02-03", y: "49" },
],
},
];
const arrayTwo = [
{
id: "This Year",
data: [
{ x: "01-02", y: "64" },
{ x: "01-03", y: "25" },
{ x: "01-04", y: "25" },
{ x: "01-05", y: "169" },
{ x: "01-15", y: "64" },
{ x: "01-16", y: "121" },
{ x: "01-17", y: "49" },
{ x: "01-18", y: "81" },
{ x: "01-19", y: "49" },
],
},
];
我试着将它映射并与x进行比较,但我无法获得理想的输出
arrayOne[0].data.map((date, index) => {
arrayTwo[0].data.map((newDate, newIndex) => {
if (date.x !== newDate.x) {
arrayTwo[0].data.push({x:date.x, y: null })
}
});
});
我想检查ArrayTo[data]中是否缺少数据如果缺少,则从arrayOne[data]中添加该数据(即,使用对象的x值,但将y值设置为null
)
期望输出:
[
{
“id”:“今年”,
“数据”:[
{“x”:“01-02”,“y”:“64”},
{“x”:“01-03”,“y”:“25”},
{“x”:“01-04”,“y”:“25”},
{“x”:“01-05”,“y”:“169”},
{“x”:“01-06”,“y”:null},
{“x”:“01-07”,“y”:null},
{“x”:“01-08”,“y”:null},
{“x”:“01-09”,“y”:null},
{“x”:“01-10”,“y”:null},
{“x”:“01-11”,“y”:null},
{“x”:“01-12”,“y”:null},
{“x”:“01-13”,“y”:null},
{“x”:“01-14”,“y”:null},
{“x”:“01-15”,“y”:“64”},
{“x”:“01-16”,“y”:“121”},
{“x”:“01-17”,“y”:“49”},
{“x”:“01-18”,“y”:“81”},
{“x”:“01-19”,“y”:“49”},
{“x”:“01-20”,“y”:null},
{“x”:“01-21”,“y”:null},
{“x”:“01-22”,“y”:null},
{“x”:“01-23”,“y”:null},
{“x”:“01-24”,“y”:null},
{“x”:“01-25”,“y”:null},
{“x”:“01-26”,“y”:null},
{“x”:“01-27”,“y”:null},
{“x”:“01-28”,“y”:null},
{“x”:“01-29”,“y”:null},
{“x”:“01-30”,“y”:null},
{“x”:“01-31”,“y”:null},
{“x”:“02-01”,“y”:null},
{“x”:“02-02”,“y”:null},
{“x”:“02-03”,“y”:null}
]
}
]
尝试以下方法:
循环遍历元素,如果在第一个数组中找不到它们,则将它们添加到第二个数组中
const arrayOne=[
{
id:“今年”,
数据:[
{x:“01-02”,y:“81”},
{x:“01-03”,y:“361”},
{x:“01-04”,y:“64”},
{x:“01-05”,y:“169”},
{x:“01-06”,y:“9”},
{x:“01-07”,y:“100”},
{x:“01-08”,y:“144”},
{x:“01-09”,y:“81”},
{x:“01-10”,y:“256”},
{x:“01-11”,y:“81”},
{x:“01-12”,y:“144”},
{x:“01-13”,y:“144”},
{x:“01-14”,y:“225”},
{x:“01-15”,y:“289”},
{x:“01-16”,y:“81”},
{x:“01-17”,y:“64”},
{x:“01-18”,y:“64”},
{x:“01-19”,y:“121”},
{x:“01-20”,y:“25”},
{x:“01-21”,y:“49”},
{x:“01-22”,y:“16”},
{x:“01-23”,y:“49”},
{x:“01-24”,y:“196”},
{x:“01-25”,y:“16”},
{x:“01-26”,y:“25”},
{x:“01-27”,y:null},
{x:“01-28”,y:“144”},
{x:“01-29”,y:“100”},
{x:“01-30”,y:“64”},
{x:“01-31”,y:“144”},
{x:“02-01”,y:“100”},
{x:“02-02”,y:“100”},
{x:“02-03”,y:“49”}
]
}
];
常数数组two=[
{
id:“今年”,
数据:[
{x:“01-02”,y:“64”},
{x:“01-03”,y:“25”},
{x:“01-04”,y:“25”},
{x:“01-05”,y:“169”},
{x:“01-15”,y:“64”},
{x:“01-16”,y:“121”},
{x:“01-999”,y:“49”},
{x:“01-18”,y:“81”},
{x:“01-19”,y:“49”}
]
}
];
控制台日志(arrayOne);
arrayTwo[0]。data.forEach(obj=>{
const found=arrayOne[0]。data.find(obj2=>obj2.x==obj.x);
如果(!找到){
arrayOne[0].data.push(obj);
}
});
控制台日志(arrayOne)代码>您可以这样做:
- 使用reduce从
arrayOne[0]创建对象(objOne
)
- 如果键存在于
数组中,则覆盖对象的任何属性[0]。数据
,再次使用reduce并使用对象
作为初始值
- 将此
objOne
转换为具有Object.values(objOne)
的数组,然后将其设置为arrayTwo[0]的属性。数据
对于两个reduce函数(其中n和m是两个数组的长度),时间复杂度应为O(n+m)。(应该比对其中一个数组中的每个元素使用“查找”更快)
守则的主要部分:
const objOne=arrayOne[0]。data.reduce((aggObj,item)=>{
aggObj[item.x]=项目;
返回aggObj;
}, {});
const mergedObjOutput=arrayTwo[0]。数据。减少((aggObj,项)=>{
aggObj[item.x]=项目;
返回aggObj;
},objOne)
const mergedFinalOutput=[…arrayTwo];
mergedFinalOutput[0]。数据=对象。值(mergedObjOutput);
console.log(mergedFinalOutput);
完整演示:
const arrayOne=[
{
id:“今年”,
数据:[
{x:“01-02”,y:“81”},
{x:“01-03”,y:“361”},
{x:“01-04”,y:“64”},
{x:“01-05”,y:“169”},
{x:“01-06”,y:“9”},
{x:“01-07”,y:“100”},
{x:“01-08”,y:“144”},
{x:“01-09”,y:“81”},
{x:“01-10”,y:“256”},
{x:“01-11”,y:“81”},
{x:“01-12”,y:“144”},
{x:“01-13”,y:“144”},
{x:“01-14”,y:“225”},
{x:“01-15”,y:“289”},
{x:“01-16”,y:“81”},
{x:“01-17”,y:“64”},
{x:“01-18”,y:“64”},
{x:“01-19”,y:“121”},
{x:“01-20”,y:“25”},
{x:“01-21”,y:“49”},
{x:“01-22”,y:“16”},
{x:“01-23”,y:“49”},
{x:“01-24”,y:“196”},
{x:“01-25”,y:“16”},
{x:“01-26”,y:“25”},
{x:“01-27”,y:null},
{x:“01-28”,y:“144”},
{x:“01-29”,y:“100”},
{x:“01-30”,y:“64”},
{x:“01-31”,y:“144”},
{x:“02-01”,y:“100”},
{x:“02-02”,y:“100”},
{x:“02-03”,y:“49”},
],
},
];
常数数组two=[
{
id:“今年”,
数据:[
{x:“01-02”,y:“64”},
{x:“01-03”,y:“25”},
{x:“01-04”,y:“25”},
{x:“01-05”,y:“169”},
{x:“01-15”,y:“64”},
{x:“01-16”,y:“121”},
{x:“01-17”,y:“49”},
{x:“01-18”,y:“81”},
{x:“01-19”,y:“49”},
],
},