Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 typescript通过将对象的值与同一个键组合,来合并2个对象数组_Javascript_Typescript_Typescript2.0 - Fatal编程技术网

Javascript typescript通过将对象的值与同一个键组合,来合并2个对象数组

Javascript typescript通过将对象的值与同一个键组合,来合并2个对象数组,javascript,typescript,typescript2.0,Javascript,Typescript,Typescript2.0,有并没有合适的方法来合并由具有相同(尽管不完全相同)键和相应数值的对象组成的两个数组 因此,我需要一个数组,其中包含组合相同键的值的对象总和。 键是日期(Date())。每个日期都有相应的编号 示例: const series_0 = [ { 'value': 3000, 'name': '2016-09-20T20:23:48.426Z' }, { 'value': 6000, 'name': '2016-09-21T08:58:04.100Z'

有并没有合适的方法来合并由具有相同(尽管不完全相同)键和相应数值的对象组成的两个数组

因此,我需要一个数组,其中包含组合相同键的值的对象总和。 键是日期(
Date()
)。每个日期都有相应的编号

示例:

const series_0 = [
  {
    'value': 3000,
    'name': '2016-09-20T20:23:48.426Z'
  },
  {
    'value': 6000,
    'name': '2016-09-21T08:58:04.100Z'
  },
  {
    'value': 4000,
    'name': '2016-09-21T05:21:08.317Z'
  },
  {
    'value': 6000,
    'name': '2016-09-19T11:26:36.302Z'
  },
  {
    'value': 5000,
    'name': '2016-09-16T11:26:19.165Z'
  }
]

const series_1 = [
  {
    'value': 3000,
    'name': '2016-09-20T20:23:48.426Z'
  },
  {
    'value': 1500,
    'name': '2016-09-21T08:58:04.100Z'
  },
  {
    'value': 8000,
    'name': '2016-09-19T11:26:36.302Z'
  },
]
let result = [
  {
    'value': 6000,
    'name': '2016-09-20T20:23:48.426Z'
  },
  {
    'value': 7500,
    'name': '2016-09-21T08:58:04.100Z'
  },
  {
    'value': 4000,
    'name': '2016-09-21T05:21:08.317Z'
  },
  {
    'value': 6000,
    'name': '2016-09-19T11:26:36.302Z'
  },
  {
    'value': 13000,
    'name': '2016-09-16T11:26:19.165Z'
  }
]
所需结果:

const series_0 = [
  {
    'value': 3000,
    'name': '2016-09-20T20:23:48.426Z'
  },
  {
    'value': 6000,
    'name': '2016-09-21T08:58:04.100Z'
  },
  {
    'value': 4000,
    'name': '2016-09-21T05:21:08.317Z'
  },
  {
    'value': 6000,
    'name': '2016-09-19T11:26:36.302Z'
  },
  {
    'value': 5000,
    'name': '2016-09-16T11:26:19.165Z'
  }
]

const series_1 = [
  {
    'value': 3000,
    'name': '2016-09-20T20:23:48.426Z'
  },
  {
    'value': 1500,
    'name': '2016-09-21T08:58:04.100Z'
  },
  {
    'value': 8000,
    'name': '2016-09-19T11:26:36.302Z'
  },
]
let result = [
  {
    'value': 6000,
    'name': '2016-09-20T20:23:48.426Z'
  },
  {
    'value': 7500,
    'name': '2016-09-21T08:58:04.100Z'
  },
  {
    'value': 4000,
    'name': '2016-09-21T05:21:08.317Z'
  },
  {
    'value': 6000,
    'name': '2016-09-19T11:26:36.302Z'
  },
  {
    'value': 13000,
    'name': '2016-09-16T11:26:19.165Z'
  }
]

谢谢大家!

实现这一点可能有很多方法,以下是我的方法:

const系列\u 0=[{
“值”:3000,
“姓名”:“2016-09-20T20:23:48.426Z”
}, {
“值”:6000,
“姓名”:“2016-09-21T08:58:04.100Z”
}, {
“值”:4000,
“姓名”:“2016-09-21T05:21:08.317Z”
}, {
“值”:6000,
“姓名”:“2016-09-19T11:26:36.302Z”
}, {
“值”:5000,
“姓名”:“2016-09-16T11:26:19.165Z”
}]
常数系列_1=[{
“值”:3000,
“姓名”:“2016-09-20T20:23:48.426Z”
}, {
“值”:1500,
“姓名”:“2016-09-21T08:58:04.100Z”
}, {
“价值”:8000,
“姓名”:“2016-09-19T11:26:36.302Z”
}, ]
//确保较长的数组是外部for循环变量
常数s0=系列长度0.length>=系列长度1.length?系列0:系列1;
常数s1=系列长度0.length>=系列长度1.length?系列1:系列0;
设res=[];
用于(常数s/s0){
让resObj={name:s.name,value:s.value};
用于(s1的常数){
如果(s.name==t.name){
资源价值+=t价值
}
}
res.push(resObj);
}

控制台日志(res)实现这一点可能有很多方法,下面是我的方法:

const系列\u 0=[{
“值”:3000,
“姓名”:“2016-09-20T20:23:48.426Z”
}, {
“值”:6000,
“姓名”:“2016-09-21T08:58:04.100Z”
}, {
“值”:4000,
“姓名”:“2016-09-21T05:21:08.317Z”
}, {
“值”:6000,
“姓名”:“2016-09-19T11:26:36.302Z”
}, {
“值”:5000,
“姓名”:“2016-09-16T11:26:19.165Z”
}]
常数系列_1=[{
“值”:3000,
“姓名”:“2016-09-20T20:23:48.426Z”
}, {
“值”:1500,
“姓名”:“2016-09-21T08:58:04.100Z”
}, {
“价值”:8000,
“姓名”:“2016-09-19T11:26:36.302Z”
}, ]
//确保较长的数组是外部for循环变量
常数s0=系列长度0.length>=系列长度1.length?系列0:系列1;
常数s1=系列长度0.length>=系列长度1.length?系列1:系列0;
设res=[];
用于(常数s/s0){
让resObj={name:s.name,value:s.value};
用于(s1的常数){
如果(s.name==t.name){
资源价值+=t价值
}
}
res.push(resObj);
}

控制台日志(res)
您可以通过使用
.reduce()
.map()
来实现这一点

其思想是为传递到函数中的所有数据集创建每个唯一日期的映射以及该日期值的运行总数,如下所示:

{
  "my-date-1": 3000,
  "my-date-2": 7500,
  ...
}
然后,一旦您有了一组独特的日期和它们的总值,您就可以简单地将它们映射到您想要的输出中

这种方法的好处是,它是动态的,因为您可以传入任意数量的数据集,这些数据集可以是任意顺序和任意长度的,并且您可以传入要按哪个属性分组。在本例中,我只是传入了两个数据集,并告诉它在“name”属性上分组。
函数组合操作(propToMatch,…数据集){
返回Object.entries(dataset.reduce)((res,curr)=>{
//将每个唯一的propToMatch值与对象的.value相加
当前汇率(obj=>{
var prop=obj[propToMatch];
//如果道具还不存在,创建它
如果(!res[prop]){
res[prop]=0;
}
//计入滚动总额
res[prop]+=obj.value;
});
//返回更新的对象
返回res;
}, {}))
//然后映射到所需的输出格式
.map(([name,value])=>({value,name}));
}
常数系列_0=[
{
“值”:3000,
“姓名”:“2016-09-20T20:23:48.426Z”
},
{
“值”:6000,
“姓名”:“2016-09-21T08:58:04.100Z”
},
{
“值”:4000,
“姓名”:“2016-09-21T05:21:08.317Z”
},
{
“值”:6000,
“姓名”:“2016-09-19T11:26:36.302Z”
},
{
“值”:5000,
“姓名”:“2016-09-16T11:26:19.165Z”
}
]
常数系列_1=[
{
“值”:3000,
“姓名”:“2016-09-20T20:23:48.426Z”
},
{
“值”:1500,
“姓名”:“2016-09-21T08:58:04.100Z”
},
{
“价值”:8000,
“姓名”:“2016-09-19T11:26:36.302Z”
},
];

日志(combineProps(“name”,series_0,series_1))
您可以通过使用
.reduce()
.map()
来实现这一点

其思想是为传递到函数中的所有数据集创建每个唯一日期的映射以及该日期值的运行总数,如下所示:

{
  "my-date-1": 3000,
  "my-date-2": 7500,
  ...
}
然后,一旦您有了一组独特的日期和它们的总值,您就可以简单地将它们映射到您想要的输出中

这种方法的好处是,它是动态的,因为您可以传入任意数量的数据集,这些数据集可以是任意顺序和任意长度的,并且您可以传入要按哪个属性分组。在本例中,我只是传入了两个数据集,并告诉它在“name”属性上分组。
函数组合操作(propToMatch,…数据集){
返回Object.entries(dataset.reduce)((res,curr)=>{
//将每个唯一的propToMatch值与对象的.value相加
当前汇率(obj=>{
var prop=obj[propToMatch];
//如果道具还不存在,创建它
如果(!res[prop]){
res[prop]=0;
}
//计入滚动总额
res[prop]+=obj.value;
});
//返回更新的对象
返回res;
}, {}))
//然后映射到所需的输出格式
.map(([name,value])=>({value,name}));
}
常数系列_0=[
{
“值”:3000,
“姓名”:“2016-09-20T20:23:48.426Z”
},
{
“值”:6000,
“姓名”:“2016-09-21T08:58:04.100Z”
},
{
“值”:4000,
“姓名”:“2016-09-21T05:21:08.317Z”
},
{
“值”:6000,
“姓名”:“2016-09-19T11:26:36.302Z”
},
{