我正在使用 Google Spreadsheets,我能够返回一个数组数组,其中嵌套数组是电子表格中的一行。
每一行的长度都需要完全相同,但不一定每个单元格都有一个值,因此为了弥补这些稀疏值,我使用了一个名为 empty 的占位符
。
例如,如果过滤器类型是 EXCLUDE 或 INCLUDE,将有四个值可用(details.field
、details.matchType
、details.expressionValue
, details.caseSensitive
);但是,如果过滤器类型是大写或小写,则只有一个值可用 (details.field
)。
下面是完整的代码,它看起来比实际大得多 - 只有很多 if 语句。
有没有更好的方法来处理这些稀疏的占位符元素?我想减少代码。
Api.prototype.getAccountFilterData = function (accountsList) {
var details, rowDefaults;
var empty = '-';
var results = [];
accountsList.forEach(function (account) {
this.wrapperGetAccountFilterData(account.id, function (filtersList) {
filtersList.forEach(function (filter) {
rowDefaults = [
account.name,
account.id,
filter.name,
filter.id,
filter.type
];
if (filter.type === 'EXCLUDE' || filter.type === 'INCLUDE') {
details = filter.getIncludeDetails() || filter.getExcludeDetails();
results.push(rowDefaults.concat([
details.field,
details.matchType,
details.expressionValue,
details.caseSensitive,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty
]));
}
if (filter.type === 'UPPERCASE' || filter.type === 'LOWERCASE') {
details = filter.uppercaseDetails || filter.lowercaseDetails;
results.push(rowDefaults.concat([
details.field,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty
]));
}
if (filter.type === 'SEARCH_AND_REPLACE') {
details = filter.searchAndReplaceDetails;
results.push(rowDefaults.concat([
details.field,
empty,
empty,
details.searchString,
details.replaceString,
details.caseSensitive,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty,
empty
]));
}
if (filter.type === 'ADVANCED') {
details = filter.advancedDetails;
results.push(rowDefaults.concat([
details.field,
empty,
empty,
empty,
empty,
empty,
details.fieldA,
details.extractA,
details.fieldB,
details.extractB,
details.outputToField,
details.outputConstructor,
details.fieldARequired,
details.fieldBRequired,
details.overrideOutputField,
details.caseSensitive
]));
}
});
});
}, this);
return results;
};
最佳答案
可以构建一个辅助函数来创建每个数组
function createRow(type, details) {
var len = 10, empty = '-', arr = Array(len);
// not sure if `empty` needed or not - simple loop here if so
switch (type) {
case 'CASES':
arr[0] = details.field;
break;
}
return arr;
}
使用
if (filter.type === 'UPPERCASE' || filter.type === 'LOWERCASE') {
details = filter.uppercaseDetails || filter.lowercaseDetails;
// call helper
var row = createRow('CASES', details);
// concat row
results.push(rowDefaults.concat(row));
}
if(filter.ty.......
关于Javascript - 在数组中插入占位符值以保持数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027188/