Javascript-在数组中插入占位符值以保持数组长度

Javascript-在数组中插入占位符值以保持数组长度,javascript,arrays,Javascript,Arrays,我正在使用Google电子表格,我能够返回数组数组,其中嵌套数组是电子表格中的一行 每一行的长度必须完全相同,但不一定每个单元格都有一个值,因此为了弥补这些稀疏值,我使用了一个名为empty的占位符 例如,如果筛选器类型为“排除”或“包括”,则将有四个值可用(详细信息.field,详细信息.matchType,详细信息.expressionValue,详细信息.区分大小写);但是,如果筛选器类型为大写或小写,则只有一个值可用(details.field) 下面是完整的代码,它看起来比实际要大得多

我正在使用Google电子表格,我能够返回数组数组,其中嵌套数组是电子表格中的一行

每一行的长度必须完全相同,但不一定每个单元格都有一个值,因此为了弥补这些稀疏值,我使用了一个名为
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);