我正在尝试将长数组分成Google表格中的多列(2D)数组。这是我的以下功能:
function SPLITARR(data, colNum) {
if (colNum <= 1) {
return data;
}
var res = [];
var col = [];
var i = 0;
data.forEach(function(el) {
if (i >= colNum) {
res.push(col);
col = [];
i = 0;
}
col.push(el);
i++;
});
res.push(col);
Logger.log(res); // Debugging purposes.
return res;
}
发送以下测试数据:
var test = ['alex', 'alecia', 'conrad', 'keenan', 'Beebo', 'jacques', 'jeremy', 'susan', 'jay']
SPLITARR(test, 2);
正在记录的结果似乎正确:
[[alex, alecia], [conrad, keenan], [Beebo, jacques], [jeremy, susan], [jay]]
但是在Google表格上,没有任何显示。该公式不显示任何错误,并填充期望的单元格数量,但不填充任何内容。
2D阵列是否需要遵循特定格式才能正确显示?
答案 0 :(得分:1)
D18:D23
看起来不像test
(['alex', 'alecia', 'conrad', 'keenan', 'Beebo', 'jacques', 'jeremy', 'susan', 'jay']
)。这是一个二维数组。看起来像:[[D18],[D19],[D20],[D21],[D22],[D23]]
使用reduce()
,concat()
和push()
之类的数组方法将数组模制成所需的格式。
function SPLITARR(rowData, numberOfCol) {
return rowData.reduce(function(acc, curr, idx) {
idx % numberOfCol === 0
? acc.push(curr)
: (acc[acc.length - 1] = acc[acc.length - 1].concat(curr));
return acc;
}, []);
}
答案 1 :(得分:0)
请尝试使用此代码,如注释中所述,您应该为2D数组使用矩形图案,因此不能将[jay]
作为最后一个元素,还请注意,如果没有名字,则不应使用名称引号-应该是[alex,alecia]
而不是['alex','alecia']
:
function arraytoarray2d() {
var array2d = [];
var arrayx = ['alex', 'alecia', 'conrad', 'keenan', 'Beebo', 'jacques', 'jeremy', 'susan', 'jay']
for (var i in arrayx) {
if (i % 2 == 0 || i == 0) {
var first = arrayx[i];
var second = arrayx[++i];
if(!second) second = '';
array2d.push([first,second]);
}}
}
输出以下内容: