[英]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.