簡體   English   中英

將數據從一個陣列復制到另一陣列

[英]copying data from one array to another array

數組一:

 array1 = [{
        "id": 1,
        "name": "aaaaa",
        "attr": [{"attr_code": "a_id", "value": "5"}]
      },
      {
        "id": 2,
        "name": "bbbbb",
        "attr": [{"attr": "a_id", "value": "4"}]
      }]

數組二:

array2 = [{
    "id": 4,
    "name": "bef",
  },
  {
    "id": 5,
    "name": "bcd",
  }]

結果數組:

 resultingArray =  [{
    "id": 1,
    "name": "aaaaa",
    "attr": [{"attr_code": "a_id", "value": "5"}],
    "a_id" :   {"id": 5, "name": "bcd"}
  },
    {
      "id": 2,
      "name": "bbbbb",
      "attr": [{"attr": "a_id", "value": "4"}],
      "a_id" : {"id": 4, "name": "bef"}
    }]

我正在尋找基於array2的id將array2對象添加到array1中。 我嘗試在兩個數組上使用map函數進行比較並添加對象,但未成功。 你能建議我怎么做嗎?

謝謝

根據array2的ID將array2對象添加到array1中。

 let array1 = [ { "id": 1, "name": "aaaaa", "attr": [{"attr_code": "a_id", "value": "5"}] }, { "id": 2, "name": "bbbbb", "attr": [{"attr": "a_id", "value": "4"}] } ]; let array2 = [{ "id": 4, "name": "bef", }, { "id": 5, "name": "bcd", } ]; let resultingArray=[]; array1.forEach(function(element) { element['a_id'] = []; element['attr'].forEach(function(attr) { element['a_id'].push(array2.find(function(item) { return item.id == attr.value; })); }); resultingArray.push(element) }); console.log(resultingArray); 

我假設您打算提取ID等於array1每個對象中的value字段的對象。

var array1 = [{
        "id": 1,
        "name": "aaaaa",
        "attr": [{"attr_code": "a_id", "value": "5"}]
      },
      {
        "id": 2,
        "name": "bbbbb",
        "attr": [{"attr": "a_id", "value": "4"}]
      }];

var array2 = [{
    "id": 4,
    "name": "bef",
  },
  {
    "id": 5,
    "name": "bcd",
  }];

var resultingArray = [];
for(var i = 0; i < array1.length; i++) {
    resultingArray[i] = array1[i];
    for(var j = 0; j < array2.length; j++) {
        if(resultingArray[i].attr[0].attr_code.value === array2[j].id) {
            resultingArray[i].push("a_id": array2[j]);
        }
    }
} 

你只需要通過對羅布泊array1 ,並為每個對象array1 ,你需要找到相應的對象array2符合標准,該標准。

您可以使用數組映射和數組索引來執行以下操作:

 var array1 = [{ "id": 1, "name": "aaaaa", "attr": [{"attr_code": "a_id", "value": "5"}] }, { "id": 2, "name": "bbbbb", "attr": [{"attr": "a_id", "value": "4"}] }]; var array2 = [{ "id": 4, "name": "bef", }, { "id": 5, "name": "bcd", }]; var result = array1.map(current=>{ //find index of attr in array2 let index = array2.findIndex(c=>{ if (c['id']===(Number(current['attr'][0]['value']))) return c; }); current["a_id"] = array2[index]; return current; }); console.log(result); 

請檢查以下代碼是否滿足您的要求。 您可能需要進行一些更改。

function mergeArrays3 (arr1, arr2) {
 return arr1.map((value, index) => {
  let object = null;
  let result = {...value};
  for (let element of arr2) {
   if (element.id == parseInt(value.attr[0].value)) {
    object = element;
    break;
   }
  }
  if (object != null) {
   let attr = value.attr[0];
   if (attr.hasOwnProperty("attr")) {
    result[value.attr[0].attr] = object;
   } else if (attr.hasOwnProperty("attr_code")) {
    result[value.attr[0].attr_code] = object;
   }
  }
  return result;
 });
}

我遍歷第一個數組,然后在第二個數組中找到與id.value.attr [0] .value相匹配的元素。 如果找到,則將這個對象添加到value.attr [0] .attr或value.attr [0] .attr_code的鍵的第一個數組中。

我嘗試在兩個數組上使用map函數進行比較並添加對象,但未成功

以下是使用map()的函數式編程方法:

 /* GIVEN */ const array1 = [{ "id": 1, "name": "aaaaa", "attr": [{ "attr_code": "a_id", "value": "5" }] }, { "id": 2, "name": "bbbbb", "attr": [{ "attr": "a_id", "value": "4" }] } ] const array2 = [{ "id": 4, "name": "bef", }, { "id": 5, "name": "bcd", }] /* From array2, make an object keyed by the 'id' field. We'll use this as a key-value lookup table */ const lookupTable = array2.reduce((accum, item) => { accum[item.id.toString()] = item return accum }, {}) console.log('***LOOKUP TABLE***\\n', lookupTable) // result is an object we use to lookup /* From array1, we append data from the lookup table */ const final = array1.map(item => { item.a_id = lookupTable[item.attr[0].value] return item }) console.log("***RESULT***\\n", final) 

希望這可以幫助。 干杯,

暫無
暫無

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

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