簡體   English   中英

Javascript - 比較兩個數組對象和 append 值

[英]Javascript - Compare two array objects and append values

如何比較兩個數組對象和 append 第一個數組 object 與第二個匹配條件鍵? 請建議。

例如,在下面的數據中,我需要將vale_data服務密鑰與sli_data服務密鑰進行比較,如果匹配,則將 append 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'] })
      }
  }
}

預期 output:

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

實際 output:

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

您可以嘗試這個,通過創建 object 作為 map 然后使用它來獲取 output 數組。 使用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);

遍歷每個數組,如果一個 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;
            }
        })
    });
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)       

 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);

實現此目的的一種可能方法是使用mapfind以下方法:

 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(element => { let sli = sli_data.find(service => service["service"] === element["service"]) || { vol_sli: "" }; return {...element, ...sli }; }); console.log(result);

其他一些答案略有不同:

  1. 將所有值組合到一個數組中,
  2. 將數組reduceMap

 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()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM