Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个数组并在JS中添加缺少的对象_Javascript_Arrays_Json_Multidimensional Array_Ecmascript 6 - Fatal编程技术网

Javascript 比较两个数组并在JS中添加缺少的对象

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

我有两个大数组,我想比较两个数组,并将缺少的数据从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-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”},
],
},