我想要在 appscript 中使用一维数组对二维数组进行排序。
使得二维数组与一维数组的顺序相同。
这是 google sheet 的链接:
一维数组 |
---|
一个 |
b |
丙 |
d |
埃 |
f |
克 |
时长 |
我 |
杰 |
钾 |
升 |
二维数组 | |
---|---|
b | 156 |
f | 68 |
一个 | 507 |
丙 | 22 |
d | 430 |
埃 | 555 |
克 | 689 |
钾 | 62 |
升 | 395 |
我 | 209 |
杰 | 745 |
时长 | 三十七 |
我使用字母作为例子,但在我的例子中不仅仅是字母而是全名。
我尝试了其他帖子名称的脚本:“在 Javascript 中按任意列表对对象数组进行排序”,但是它不起作用,它只是返回我的二维数组而不对其进行排序。
我尝试的脚本:
const objects = spreadsheetApp.getActive().getSheetByName("feuille 2").getRange('A;B').getValues()
const order = spreadsheetApp.getActive().getSheetByName("feuille 1").getRange('A;A').getValues()
const orderIndex = {}
order.forEach((value, index) => orderIndex[value] = index);
// Sort
objects.sort((a, b) => orderIndex[a.id] - orderIndex[b.id]);
// Log
console.log('orderIndex:', orderIndex);
console.log('objects:', objects);
编辑:我根据答案尝试了脚本,但没有起作用:
function myFunction() {
let objects = SpreadsheetApp.getActive().getSheetByName("Feuille 7").getRange('D:E').getValues()
let order = SpreadsheetApp.getActive().getSheetByName("Feuille 7").getRange('A:A').getValues().flat()
/* Create a mapping object `orderIndex`:
*/
let orderIndex = {}
order.forEach((value, index) => orderIndex[value] = index);
// Sort
objects.sort((a, b) => orderIndex[a] - orderIndex[b])
// Log
Logger.log("/////////////////////////order////////////////////////////////")
Logger.log(order)
Logger.log("/////////////////////////objects////////////////////////////////")
Logger.log(objects)
SpreadsheetApp.getActive().getSheetByName("Feuille 7").getRange('H:I').setValues(objects)
}