'Algorithm problem solving: How to simplify the following javascript code?
Function description
when const mergeTable=[2], Expected function return value
{ rowSpan: 2 }
{ rowSpan: 0 }
when const mergeTable=[2,3]; Expected function return value
{ rowSpan: 2 }
{ rowSpan: 0 }
{ rowSpan: 3 }
{ rowSpan: 0 }
{ rowSpan: 0 }
when const mergeTable=[2,3,3,2]; Expected function return value
{ rowSpan: 2 }
{ rowSpan: 0 }
{ rowSpan: 3 }
{ rowSpan: 0 }
{ rowSpan: 0 }
{ rowSpan: 3 }
{ rowSpan: 0 }
{ rowSpan: 0 }
{ rowSpan: 2 }
{ rowSpan: 0 }
functions that need to be optimized, The function has been implemented, the code is redundant, how to optimize
const mergeTable = [2, 3, 3, 2]; // test ok
// How to simplify this function
function renderRowSpan(index) {
for (let i in mergeTable) {
i = Number(i);
if (i === 0) {
if (index === 0) {
return { rowSpan: mergeTable[0] };
} else if (index < mergeTable[0]) {
return { rowSpan: 0 };
}
}
if (i === 1) {
if (index === mergeTable[0]) {
return { rowSpan: mergeTable[1] };
}
if (index < mergeTable[0] + mergeTable[1]) {
return { rowSpan: 0 };
}
}
if (i === 2) {
if (index === mergeTable[0] + mergeTable[1]) {
return { rowSpan: mergeTable[2] };
}
if (index < mergeTable[0] + mergeTable[1] + mergeTable[2]) {
return { rowSpan: 0 };
}
}
if (i === 3) {
if (index === mergeTable[0] + mergeTable[1] + mergeTable[2]) {
return { rowSpan: mergeTable[3] };
}
if (
index < (mergeTable[0] + mergeTable[1] + mergeTable[2] + mergeTable[3])
) {
return { rowSpan: 0 };
}
}
}
}
// execute function
for (let index = 0; index < 10; index++) {
console.log(renderRowSpan(index));
}
Solution 1:[1]
I think this should work and produce dynamic result as per number of elements in mergeTable.
function renderRowSpan(mergeTable){
const result = [];
for (const item of mergeTable) {
let i = item;
while(i > 0) {
result.push({ rowSpan: i === item ? item : 0 });
i--;
}
}
return result;
}
Solution 2:[2]
function renderRowSpan(mergeTable){
return mergeTable.reduce(function(o, n){
o.push({rowspan:n});
for(let i=1; i<n; ++i) o.push({rowspan:0});
return o;
}, []);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Harsh Mittal |
Solution 2 | QuentinUK |