首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >算法问题解决:如何简化以下javascript代码?

算法问题解决:如何简化以下javascript代码?
EN

Stack Overflow用户
提问于 2022-02-26 09:36:41
回答 2查看 51关注 0票数 -1

功能描述

当const mergeTable=2时,期望函数返回值

代码语言:javascript
运行
复制
{ rowSpan: 2 }
{ rowSpan: 0 }

当mergeTable=2,3;期望函数返回值时

代码语言:javascript
运行
复制
{ rowSpan: 2 }
{ rowSpan: 0 }
{ rowSpan: 3 }
{ rowSpan: 0 }
{ rowSpan: 0 }

当mergeTable=2,3,3,2;期望函数返回值时

代码语言:javascript
运行
复制
{ rowSpan: 2 }
{ rowSpan: 0 }
{ rowSpan: 3 }
{ rowSpan: 0 }
{ rowSpan: 0 }
{ rowSpan: 3 }
{ rowSpan: 0 }
{ rowSpan: 0 }
{ rowSpan: 2 }
{ rowSpan: 0 }

需要优化的函数,函数已经实现,代码是多余的,如何优化?

代码语言:javascript
运行
复制
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));
}
EN

回答 2

Stack Overflow用户

发布于 2022-02-26 09:52:19

我认为这应该可以工作,并根据mergeTable中的元素数产生动态结果。

代码语言:javascript
运行
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2022-02-26 10:23:15

代码语言:javascript
运行
复制
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;
    }, []);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71275549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档