我想在 appscript 中对 2d 数组与 1d 数组进行排序。
使得 2D 数组与 1D 数组的顺序相同。
有谷歌表格的链接:
一维数组 |
---|
a |
b |
c |
d |
e |
f |
g |
h |
我 |
j |
k |
l |
二维数组 | |
---|---|
b | 156 |
f | 68 |
a | 507 |
c | 22 |
d | 430 |
e | 555 |
g | 689 |
k | 62 |
l | 395 |
我 | 209 |
j | 745 |
h | 37 |
我使用字母表作为示例,但在我的例子中不仅仅是字母,还有全名。
我尝试了另一个帖子名称的脚本:“在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);
order
是一个二维数组。无论大小如何,getValues()
始终返回二维数组。 flat
将其十化为一维数组:
const order = spreadsheetApp.getActive().getSheetByName("feuille 1").getRange('A;A').getValues().flat()
二维数组中没有
id
属性。删除它:
objects.sort((a, b) => orderIndex[a] - orderIndex[b]);