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

时间:2019-10-11 21:27:25

标签: javascript

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

例如,在下面的数据中,我需要将vale_data服务密钥与sli_data服务密钥进行比较,如果匹配,则将sli_data vol_sli键值附加到{{1} }。

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'] })
      }
  }
}

实际输出:

vale_data = [
 {service: "allocateorder", vol_slo: "10000", vol_sli: "0.9484949"},
 {service: "cancelorder", vol_slo: "10000", vol_sli: "0.242322"},
 {service: "adviceorder", vol_slo: "10000", vol_sli: ""} ]

6 个答案:

答案 0 :(得分:2)

您可以尝试通过以下方法进行尝试:将对象创建为地图,然后使用该对象获取输出数组。使用Javascript MAP存储结果

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 sli_dataMap = new Map(sli_data.map(({service,vol_sli}) => ([service,vol_sli])));
 
vale_data = vale_data.map(obj => ({...obj,vol_sli:sli_dataMap.get(obj.service) || ''}));

console.log(vale_data);

答案 1 :(得分:0)

遍历每个数组,如果一个sli.service与一个vale.service相同,则向此vale添加一个等于sli.vol_sli的vol_sli字段。

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

答案 2 :(得分:0)

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)       

答案 3 :(得分:0)

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"}];


vale_data.map(vale_record => {
    let rec_found = sli_data.find(sli_record => sli_record.service === vale_record.service);
    if(rec_found) {
    vale_record['vol_sli'] = rec_found['vol_sli'];
    }
    else {
    vale_record['vol_sli'] = ''
    } 
    return vale_record;
});

console.log(vale_data);

答案 4 :(得分:0)

完成此操作的一种可能方法是通过以下方式使用<GeneratePackageOnBuild>true</GeneratePackageOnBuild>components = {{component string from DB}} let formio = new Formio.createForm(document.getElementById(element), components, { saveDraft: true, readOnly: ((readonly) ? readonly : false) } ).then(function (form) { if (data) { var subm = JSON.parse(data) form.submission = { data: subm }; } form.on('submit', function (submission) { //Submission Code }); form.on('change', function (x) { //Change Code }) form.on('error', (errors) => { //Error Code }) form.on("render", function () { //Any Render Overrides? }) }).catch(function (ex) { });

map

答案 5 :(得分:0)

其他一些答案略有不同:

  1. 将所有值组合到单个数组中,
  2. reduce将该数组放入Map

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

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

const mergedData = [...vale_data, ...sli_data].reduce((map, item) => {
  const existing = map.get(item.service) || { vol_slo: "", vol_sli: "" };
  map.set(item.service, {
    ...existing,
    ...item,
  })
  return map;
}, new Map());

console.log(Array.from(mergedData.values()));