簡體   English   中英

Map 嵌套數字數組的索引到字符串數組的索引

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

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