我正在尝试将数组转换为稍有不同的格式,并且现在像下面这样使用拼接:
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循环运行时,是否应该覆盖特定索引处的元素?为什么现在发生压倒一切?我在这里真的在做错什么吗?
答案 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。如果为零,那么 您要做的就是在该索引处插入新项目和所有其他项目,然后 超出范围将向右移动。