拼接不覆盖forEach循环内指定索引处数组中的元素

时间:2018-11-14 18:18:03

标签: javascript

我正在尝试将数组转换为稍有不同的格式,并且现在像下面这样使用拼接:

letnewArray.splice( idx , 0 , obj );

我的完整代码如下:

let yaml_doc_json = [{
      name: 'guidIds',
      ids: ['209A3935-2305-4786-960B-BB008F3E9DC9',
        'C10D76D2-89A3-4F28-B64E-2D78C953B283',
        'B7164432-94B3-4096-A9EA-181D0F00D25E',
        'DA366048-557F-42ED-AB1D-3B2196278E86'
      ]
    },
    {
      name: 'keyMessage',
      ids: ['Enbril_RA_30.00',
        'Enbril_RA_40.00',
        'Enbril_RA_50.00',
        'Enbril_RA_10.00'
      ]
    },
    {
      name: 'SequenceName',
      ids: ['1_KEY_LUN_09_2017_Ukr_main',
        '1_KEY_LUN_09_2017_Ukr_sl01',
        '1_KEY_LUN_09_2017_Ukr_sl02',
        '1_KEY_LUN_09_2017_Ukr_sl03'
      ]
    }
  ],
  letnewArray = [];


yaml_doc_json.forEach((e, i) => {
  //console.log(e);
  let id_name = yaml_doc_json[i].name;
  //console.log(id_name);
  e['ids'].forEach((elem, idx) => {
    console.log(idx);
    let obj = {
      id_name: elem
    }
    letnewArray.splice(idx, 0, obj);
  });
});

console.log(letnewArray);

即使letnewArray始终在0-3之间,我如何在idx中获得12个元素?每次forEach循环运行时,是否应该覆盖特定索引处的元素?为什么现在发生压倒一切?我在这里真的在做错什么吗?

3 个答案:

答案 0 :(得分:1)

{{1}中的12个元素来自对letnewArray中的三个元素的详细说明四次(yaml_doc_json元素的数量)。

之所以有12个事实,是因为ids的语法。完整的参考资料可以在这里找到:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

重要的部分是语法: Array.prototype.splice

让我们回到您的代码。我们有 array.splice(start[, deleteCount[, item1[, item2[, ...]]]])  按照上面的定义,我们可以推断

  • letnewArray.splice( idx , 0 , obj );
  • array => letnewArray
  • start => idx
  • deleteCount => 0

各种item1 => obj元素被添加到数组中。因此,每次for循环循环时,我们都会删除0个项目并添加1个元素。

这说明了为什么item1, item2, ...变量中的结尾元素为12。

我希望能有所帮助。

答案 1 :(得分:-1)

Splice将第三个参数添加到现有数组。请参阅https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_splice1

答案 2 :(得分:-1)

@charlietfl在评论中回答了这个问题。

  

splice()的第二个参数是deleteCount。如果为零,那么   您要做的就是在该索引处插入新项目和所有其他项目,然后   超出范围将向右移动。