[英]Map nested array values to Map with functionality to set Map values by array index which will be reflected in nested array by reference
[英]Map the index of nested array of numbers to the index of an array of strings
我正在嘗試將 foo3.flat() 中的數組元素 map 到 foo2 中的元素。 例如,如果 foo2 中的第 0 個索引是“address1”,而 foo3 的第 0 個索引是 [1,2,3],則 [1,2,3] 中的所有單個數字都應映射到“address1”。 目前,這是 obj 的映射方式。
對象的值
{
address1: [ 1, 2, 3 ],
address2: [ 4, 5 ],
address3: [ 6, 7, 8, 9 ],
address4: [ 10 ]
}
代碼
var foo1 = []
var foo2 = [
'address1',
'address2',
'address3',
'address4'
]
var foo3 = [
[1,2,3],
[4,5],
[6,7,8,9],
[10]
]
var foo4 = [
[11,12,13],
[14,15],
[16,17,18,19],
[]
]
var foo5 = [
[[111,111,111],[222,222,222],[333,333,333]],
[[444,444,444],[555,555,555]],
[[666,666,666],[777,777,777],[888,888,888],[999,999,999]],
[]
]
var obj = {}
foo2.forEach((key, i) => obj[key] = foo3[i])
foo3 = foo3.flat()
foo4 = foo4.flat()
foo5 = foo5.flat()
for(var i=0;i <foo3.length;i++) {
foo1.push({
key1:'',
key2:foo3[i],
key3:foo4[i],
key4: foo5[i]
})
}
console.log(foo1)
結果
[
{ key1: '', key2: 1, key3: 11, key4: [ 111, 111, 111 ] },
{ key1: '', key2: 2, key3: 12, key4: [ 222, 222, 222 ] },
{ key1: '', key2: 3, key3: 13, key4: [ 333, 333, 333 ] },
{ key1: '', key2: 4, key3: 14, key4: [ 444, 444, 444 ] },
{ key1: '', key2: 5, key3: 15, key4: [ 555, 555, 555 ] },
{ key1: '', key2: 6, key3: 16, key4: [ 666, 666, 666 ] },
{ key1: '', key2: 7, key3: 17, key4: [ 777, 777, 777 ] },
{ key1: '', key2: 8, key3: 18, key4: [ 888, 888, 888 ] },
{ key1: '', key2: 9, key3: 19, key4: [ 999, 999, 999 ] },
{ key1: '', key2: 10, key3: undefined, key4: undefined }
]
預期結果
[
{ key1: 'address1', key2: 1, key3: 11, key4: [ 111, 111, 111 ] },
{ key1: 'address1', key2: 2, key3: 12, key4: [ 222, 222, 222 ] },
{ key1: 'address1', key2: 3, key3: 13, key4: [ 333, 333, 333 ] },
{ key1: 'address2', key2: 4, key3: 14, key4: [ 444, 444, 444 ] },
{ key1: 'address2', key2: 5, key3: 15, key4: [ 555, 555, 555 ] },
{ key1: 'address3', key2: 6, key3: 16, key4: [ 666, 666, 666 ] },
{ key1: 'address3', key2: 7, key3: 17, key4: [ 777, 777, 777 ] },
{ key1: 'address3', key2: 8, key3: 18, key4: [ 888, 888, 888 ] },
{ key1: 'address3', key2: 9, key3: 19, key4: [ 999, 999, 999 ] },
{ key1: 'address4', key2: 10, key3: undefined, key4: undefined }
]
var foo1 = [] var foo2 = [ 'address1', 'address2', 'address3', 'address4' ] var foo3 = [ [1, 2, 3], [4, 5], [6, 7, 8, 9], [10] ] var foo4 = [ [11, 12, 13], [14, 15], [16, 17, 18, 19], [] ] var foo5 = [ [ [111, 111, 111], [222, 222, 222], [333, 333, 333] ], [ [444, 444, 444], [555, 555, 555] ], [ [666, 666, 666], [777, 777, 777], [888, 888, 888], [999, 999, 999] ], [] ] var obj = {} foo2.forEach((key, i) => obj[key] = foo3[i]) foo3 = foo3.flat() foo4 = foo4.flat() foo5 = foo5.flat() for (var i = 0; i < foo3.length; i++) { foo1.push({ key1: '', key2: foo3[i], key3: foo4[i], key4: foo5[i] }) } console.log(foo1)
這是產生預期結果的代碼:
var foo1 = []; var foo2 = [ 'address1', 'address2', 'address3', 'address4', ]; var foo3 = [ [1, 2, 3], [4, 5], [6, 7, 8, 9], [10], ]; var foo4 = [ [11, 12, 13], [14, 15], [16, 17, 18, 19], [], ]; var foo5 = [ [ [111, 111, 111], [222, 222, 222], [333, 333, 333] ], [ [444, 444, 444], [555, 555, 555] ], [ [666, 666, 666], [777, 777, 777], [888, 888, 888], [999, 999, 999] ], [], ]; const map = new Map(); for (let i = 0; i < foo2.length; i++) { const maxLength = Math.max(foo3[i].length, foo4[i].length, foo5[i].length); for (let j = 0; j < maxLength; j++) { map.set('key1', foo2[i]); map.set('key2', foo3[i][j]); map.set('key3', foo4[i][j]); map.set('key4', foo5[i][j]); const obj = Object.fromEntries(map); foo1.push(obj); map.clear(); } } console.log(foo1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.