Javascript-在数组中插入占位符值以保持数组长度
我正在使用Google电子表格,我能够返回数组数组,其中嵌套数组是电子表格中的一行 每一行的长度必须完全相同,但不一定每个单元格都有一个值,因此为了弥补这些稀疏值,我使用了一个名为Javascript-在数组中插入占位符值以保持数组长度,javascript,arrays,Javascript,Arrays,我正在使用Google电子表格,我能够返回数组数组,其中嵌套数组是电子表格中的一行 每一行的长度必须完全相同,但不一定每个单元格都有一个值,因此为了弥补这些稀疏值,我使用了一个名为empty的占位符 例如,如果筛选器类型为“排除”或“包括”,则将有四个值可用(详细信息.field,详细信息.matchType,详细信息.expressionValue,详细信息.区分大小写);但是,如果筛选器类型为大写或小写,则只有一个值可用(details.field) 下面是完整的代码,它看起来比实际要大得多
empty
的占位符
例如,如果筛选器类型为“排除”或“包括”,则将有四个值可用(详细信息.field
,详细信息.matchType
,详细信息.expressionValue
,详细信息.区分大小写
);但是,如果筛选器类型为大写或小写,则只有一个值可用(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;
};
此代码:
results.push(rowDefaults.concat([
details.field,
details.matchType,
details.expressionValue,
细节。区分大小写,
空的,,
空的,,
空的,,
空的,,
空的,,
空的,,
空的,,
空的,,
空的,,
空的,,
空的,,
空的
]))
可以构建一个助手函数来创建每个数组
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;
}
使用
如果
empty
是一个字符串,您可以。重复它并。将它拆分为数组,然后将它推送到任何数组,如
arr.push.apply(arr, 'empty '.repeat(times).split(' ').splice(0, times));
例如
这就回来了,
[details.field,details.matchType,details.expressionValue,details.case敏感,“empty”,“empty”,“empty”,“empty”,“empty”,“empty”,“empty”,“empty”,“empty”,“empty”]
考虑阿纳尔席语中不存在的成员:<代码>([详细说明:字段、详细信息、详细类型、详细信息、详细表达式、详细说明、CASE敏感、、、、、、/代码>)。注意每个逗号<代码>、<代码>创建一个成员,因此<代码>、[、] <代码>长度为2,而不是3(虽然旧版本的IE为尾随的删除错误。
arr.push.apply(arr, 'empty '.repeat(times).split(' ').splice(0, times));
var arr = [];
arr.push(details.field, details.matchType, details.expressionValue, details.caseSensitive);
arr.push.apply(arr, 'empty '.repeat(12).split(' ').splice(0, 12));
console.log(arr);