给定Header数组并使所有其他数组成为相同格式的header数组:
HEADER ["", "", "a", "b", "", "c", "d","",""]
1. ["", "", "1", "2", "", "3", "4"] ==== CORRECT FORMAT
2. ["1","2","", "3", "4","",""] ==== WRONG FORMAT
3. ["", "", "", "", "1", "2", "", "3", "4"] = WRONG FORMAT
Output array :
1. ["", "", "1", "2", "", "3", "4"]
2. ["", "", "1", "2", "", "3", "4"]
3. ["", "", "1", "2", "", "3", "4"]
标头和输入数组长度相同。但是输出数组长度必须是头数组的最后一个元素。
我无法使用以下算法修复所有类型的输入:
alignArray(arr1, arr2) {
let arr3 = [];
let arr4 = _.compact(arr2);
let count = 0;
_.map(arr1, function (num, index) {
if (_.isString(num) && !(_.isEmpty(num))) {
if (arr4[count])
arr3.push(arr4[count]);
else
arr3.push("");
count++;
} else {
arr3.push("");
}
});
return arr3;
}
一种方法是将第一个输入数组视为队列,只要b
具有值,就会使项目出列。根据您的更新,我已经删除了输出数组末尾的空字符串。
const alignArray = (a, b) => {
a = a.filter(e => e);
b = b.map(e => e === "" ? e : a.shift() || "");
let idx = b.length - 1;
for (; idx >= 0 && b[idx] === ""; idx--);
return b.slice(0, idx + 1);
};
const header = ["", "", "a", "b", "", "c", "d", "", ""];
const rows = [
["", "", "1", "2", "", "3", "4", "", ""],
["1","2","", "3", "4","",""],
["", "", "", "", "1", "2", "", "3", "4"]
];
rows.forEach(e => console.log(alignArray(e, header)));