Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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-比较两个数组对象并附加值_Javascript - Fatal编程技术网

Javascript-比较两个数组对象并附加值

Javascript-比较两个数组对象并附加值,javascript,Javascript,如何比较两个数组对象并将第一个数组对象与第二个数组对象附加到匹配条件键上?请建议 例如,在下面的数据中,我需要将vale_data维修键与sli_data维修键进行比较,如果匹配,则将sli_datavol_sli键值附加到vale_data var vale_data = [ {service: "allocateorder", vol_slo: "10000"}, {service: "cancelorder", vol_slo: "10000"},

如何比较两个数组对象并将第一个数组对象与第二个数组对象附加到匹配条件键上?请建议

例如,在下面的数据中,我需要将
vale_data
维修键与
sli_data
维修键进行比较,如果匹配,则将
sli_data
vol_sli键值附加到
vale_data

var vale_data = [
          {service: "allocateorder", vol_slo: "10000"},
          {service: "cancelorder", vol_slo: "10000"},
          {service: "adviceorder", vol_slo: "10000"}]

var sli_data = [
          {service: "allocateorder", vol_sli: "0.9484949"},
          {service: "cancelorder", vol_sli: "0.242322"}]
我试过下面的方法,但没有成功

var vale_data = [
          {service: "allocateorder", vol_slo: "10000"},
          {service: "cancelorder", vol_slo: "10000"},
          {service: "adviceorder", vol_slo: "10000"}]

var sli_data = [
          {service: "allocateorder", vol_sli: "0.9484949"},
          {service: "cancelorder", vol_sli: "0.242322"}]

for (i=0; i<Object.keys(vale_data).length; i++) {
  for (j=0; j<Object.keys(sli_data).length; j++) {
      if (Object.values(vale_data)[i]['service'] == Object.values(sli_data)[i]['service']) {
          vale_data.map(item => {item.vol_sli = Object.values(sli_data)[j]['vol_sli'] })
      }
  }
}
实际产量:

error: Uncaught TypeError: Cannot read property 'service' of undefined

您可以尝试这样做,创建一个对象作为映射,然后使用它来获取输出数组。使用来存储结果

var-vale\u数据=[
{服务:“分配顺序”,卷slo:“10000”},
{服务:“取消订单”,卷slo:“10000”},
{服务:“咨询命令”,第1卷:“10000”}]
变量sli_数据=[
{服务:“分配顺序”,卷sli:“0.9484949”},
{服务:“取消订单”,卷sli:“0.242322”}]
var sli_dataMap=newmap(sli_data.Map({service,vol_sli})=>([service,vol_sli]));
vale_data=vale_data.map(obj=>({…obj,vol_sli:sli_dataMap.get(obj.service)| |''}));

控制台日志(vale_数据)您可以尝试这样做,方法是创建一个对象作为贴图,然后使用该对象获取输出数组。使用来存储结果

var-vale\u数据=[
{服务:“分配顺序”,卷slo:“10000”},
{服务:“取消订单”,卷slo:“10000”},
{服务:“咨询命令”,第1卷:“10000”}]
变量sli_数据=[
{服务:“分配顺序”,卷sli:“0.9484949”},
{服务:“取消订单”,卷sli:“0.242322”}]
var sli_dataMap=newmap(sli_data.Map({service,vol_sli})=>([service,vol_sli]));
vale_data=vale_data.map(obj=>({…obj,vol_sli:sli_dataMap.get(obj.service)| |''}));

控制台日志(vale_数据)遍历每个数组,如果一个sli.service与一个vale.service相同,则向该vale添加一个等于sli.vol\u sli的vol\u sli字段

   vale_data.forEach(function (vale) {
        sli_data.forEach(function (sli) {
            if (sli.service === vale.service) {
                vale.vol_sli = sli.vol_sli;
            }
        })
    });

迭代每个数组,如果一个sli.service与一个vale.service相同,则向该vale添加一个等于sli.vol\u sli的vol\u sli字段

   vale_data.forEach(function (vale) {
        sli_data.forEach(function (sli) {
            if (sli.service === vale.service) {
                vale.vol_sli = sli.vol_sli;
            }
        })
    });
var-vale\u数据=[
{服务:“分配顺序”,卷slo:“10000”},
{服务:“取消订单”,卷slo:“10000”},
{服务:“咨询命令”,第1卷:“10000”};
变量sli_数据=[
{服务:“分配顺序”,卷sli:“0.9484949”},
{服务:“取消订单”,卷sli:“0.242322}];
vale_data.map(vale_记录=>{
让rec_found=sli_data.find(sli_record=>sli_record.service==vale_record.service);
如果(找到记录){
淡水河谷记录['vol_sli']=找到的记录['vol_sli'];
}
否则{
淡水河谷记录
} 
返回vale_记录;
});
控制台日志(vale_数据)
var-vale\u数据=[
{服务:“分配顺序”,卷slo:“10000”},
{服务:“取消订单”,卷slo:“10000”},
{服务:“咨询命令”,第1卷:“10000”};
变量sli_数据=[
{服务:“分配顺序”,卷sli:“0.9484949”},
{服务:“取消订单”,卷sli:“0.242322}];
vale_data.map(vale_记录=>{
让rec_found=sli_data.find(sli_record=>sli_record.service==vale_record.service);
如果(找到记录){
淡水河谷记录['vol_sli']=找到的记录['vol_sli'];
}
否则{
淡水河谷记录
} 
返回vale_记录;
});

控制台日志(vale_数据)实现这一点的可能方法之一是使用
map
find
以下方法:

var-vale\u数据=[{
服务:“分配订单”,
卷slo:“10000”
},
{
服务:“取消订单”,
卷slo:“10000”
},
{
服务:“咨询订单”,
卷slo:“10000”
}
];
变量sli_数据=[{
服务:“分配订单”,
卷sli:“0.9484949”
},
{
服务:“取消订单”,
卷sli:“0.242322”
}
];
var result=vale_data.map(元素=>{
让sli=sli_data.find(service=>service[“service”]==element[“service”])||
{vol_sli:''};
返回{…元素,
…sli
};
});

控制台日志(结果)实现这一点的可能方法之一是使用
map
find
以下方法:

var-vale\u数据=[{
服务:“分配订单”,
卷slo:“10000”
},
{
服务:“取消订单”,
卷slo:“10000”
},
{
服务:“咨询订单”,
卷slo:“10000”
}
];
变量sli_数据=[{
服务:“分配订单”,
卷sli:“0.9484949”
},
{
服务:“取消订单”,
卷sli:“0.242322”
}
];
var result=vale_data.map(元素=>{
让sli=sli_data.find(service=>service[“service”]==element[“service”])||
{vol_sli:''};
返回{…元素,
…sli
};
});

控制台日志(结果)其他一些答案略有不同:

  • 将所有值合并到一个数组中
  • 数组缩减为一个
    映射
  • const vale\u数据=[
    {服务:“分配顺序”,卷slo:“10000”},
    {服务:“取消订单”,卷slo:“10000”},
    {service:“adviceorder”,vol_slo:“10000”},
    ]
    常量sli_数据=[
    {服务:“分配顺序”,卷sli:“0.9484949”},
    {服务:“取消订单”,卷sli:“0.242322”},
    ]
    const mergedData=[…值数据,…sli数据].reduce((映射,项)=>{
    const existing=map.get(item.service)|{vol_slo:,vol_sli::};
    映射集(项服务、{
    ……现有,
    …项目,
    })
    返回图;
    },新地图());
    
    log(Array.from(mergedData.values())其他一些答案略有不同:

  • 将所有值合并到一个数组中
  • 数组缩减为一个
    映射
  • const vale\u数据=[
    {服务:“分配顺序”,卷slo:“10000”},
    {服务:“取消订单”,卷slo:“10000”},
    {service:“adviceorder”,vol_slo:“10000”},
    ]
    常量sli_数据=[
    {服务:“分配顺序”,卷sli:“0.9484949”},
    {服务:“取消订单”,卷sli:“0.242322”},
    ]
    const mergedData=[…值数据,…sli数据].reduce((映射,项)=>{
    const existing=map.get(item.service)| |{vol_
    
    var vale_data = [
              {service: "allocateorder", vol_slo: "10000"},
              {service: "cancelorder", vol_slo: "10000"},
              {service: "adviceorder", vol_slo: "10000"}]
    
    var sli_data = [
              {service: "allocateorder", vol_sli: "0.9484949"},
              {service: "cancelorder", vol_sli: "0.242322"}]
    
       var result = vale_data.map(vale_data_value => {
            const check_sli_data = sli_data.find(sli_data_value => sli_data_value.service === vale_data_value.service );
            if(check_sli_data){
              vale_data_value.vol_sli = check_sli_data.vol_sli
            }
            return vale_data_value;
       });
    
       console.log(result)