代码之家  ›  专栏  ›  技术社区  ›  kevzettler

如何将数组索引映射到子集索引?

  •  -1
  • kevzettler  · 技术社区  · 7 年前

    我有一个n长度的数组。我需要创建一个重复序列的新数组。新数组将有与n数组中的项相对应的子eset数组,如:

    N0 = [1,0,0]
    N1 = [0,1,0]
    N2 = [0,0,1]
    N3 = [1,0,0]
    N4 = [0,1,0];
    reapeat...
    

    预期产量: [[1,0,0],[0,1,0],[0,0,1],[1,0,0][0,1,0][0,0,1], repeating...]

    我对如何做到这一点一无所知我的第一个想法是在每个元素的索引上使用模运算符

    positions = [[98,8097,709], [8,907,098], [234,543w6,098], [098,087,08089], "LOL", {cool: bro}, function(){console.log(derp);}]
    
    positions.map((pos, idx) => {
                if(idx % 1){
                  return [1,0,0];              
                }
    
                if(idx % 2){
                return [0,1,0];
                }
    
                if(idx % 3){
                 return [0,0,1];
                }
              })
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   charlietfl    7 年前

    使用 new Array(length).fill(0) 在你的 map() 然后使用模来设置 1

    let positions = [
      [98, 8097, 709],
      [8, 907, 098],
      [234, '543w6', 098],
      [098, 087, 08089], "LOL", {
        cool: 'bro'
      },
      function() {
        console.log('derp');
      }
    ]
    
    let res = positions.map((pos, idx) => {
      let subArr = new Array(3).fill(0)
      subArr[idx % 3] = 1
      return subArr
    })
    console.log(res)
        2
  •  0
  •   kevzettler    7 年前

    好吧,留下我自己的答案,因为这已经偏离了目标

    有一个答案贴了出来,我把它抄了过来。它被否决了,被删除了,我不确定作者是谁

    > [43,534,76,87,97,89,78,67,7645,6534,54,54,546,657,675,68].map(function(val, idx){ var ret = [0,0,0]; ret[idx % 3] = 1; return ret})
    [ [ 1, 0, 0 ],
      [ 0, 1, 0 ],
      [ 0, 0, 1 ],
      [ 1, 0, 0 ],
      [ 0, 1, 0 ],
      [ 0, 0, 1 ],
      [ 1, 0, 0 ],
      [ 0, 1, 0 ],
      [ 0, 0, 1 ],
      [ 1, 0, 0 ],
      [ 0, 1, 0 ],
      [ 0, 0, 1 ],
      [ 1, 0, 0 ],
      [ 0, 1, 0 ],
      [ 0, 0, 1 ],
      [ 1, 0, 0 ] ]
    
        3
  •  -1
  •   Stephen Thomas    7 年前
    const subarrays = [
        [1,0,0],
        [0,1,0],
        [0,0,1],
        [1,0,0],
        [0,1,0]
    ];
    
    const N = 100;
    
    result = Array.from({length: N}).map((n,idx) => subarrays[idx%subarrays.length])