如何在多维数组同一索引插入多元素?GAS数组合并实现求助
解决Google Apps Script中多维数组插入元素的问题
嘿,我懂你碰到的麻烦了——用.map搭配.splice的时候没得到预期的结果对吧?其实问题多半出在splice的特性或者索引对应上,咱们一步步来搞定它。
首先直接给你能跑通的代码,完全符合你的需求:
function mergeArrays() { const arr1 = ["Diesel", "Solar", "Biomass"]; const arr2 = [ ["ABC", "Nigeria", "Diesel,Solar", 35], ["DEF", "Egypt", "Solar,Diesel", 50], ["GHI", "Ghana", "Biomass,Diesel", 70] ]; const newArr = arr2.map((row, index) => { // 先复制当前行的副本,避免修改原数组arr2 const newRow = [...row]; // 在索引3的位置插入arr1中对应索引的元素 newRow.splice(3, 0, arr1[index]); return newRow; }); console.log(newArr); // 输出就是你想要的目标数组: // [ ["ABC", "Nigeria", "Diesel,Solar", "Diesel", 35], ["DEF", "Egypt", "Solar,Diesel", "Solar", 50], ["GHI", "Ghana", "Biomass,Diesel", "Biomass", 70] ] }
关键细节解释
为什么要复制行?
splice是一个会修改原数组的方法,如果直接对row操作,会不小心把原arr2也改掉。用扩展运算符[...row]或者row.slice()来创建当前行的副本,就能保证原数组不受影响,只修改我们要的新数组。怎么对应arr1的元素?
.map方法的第二个参数index就是当前遍历的arr2行的索引,刚好和arr1的元素索引一一对应,这样就能把arr1的元素依次插入到arr2的对应行里。splice的参数含义
newRow.splice(3, 0, arr1[index])里:- 第一个参数
3是插入位置的索引 - 第二个参数
0表示不删除任何元素(只做插入操作) - 第三个参数就是要插入的
arr1元素
- 第一个参数
另一种不用splice的写法
如果你不想用splice,也可以用数组拼接的方式,更直观也不会修改原数据:
const newArr = arr2.map((row, index) => { // 把行拆成前3个元素 + arr1对应元素 + 剩余元素 return [...row.slice(0, 3), arr1[index], ...row.slice(3)]; });
这样写同样能得到你想要的结果,而且逻辑更清晰,适合不喜欢用修改原数组方法的场景。
内容的提问来源于stack exchange,提问作者Ajay Ubhi
相关产品推荐
相关产品推荐

