首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算第二位置相同值的两个阵列的差值

如何计算第二位置相同值的两个阵列的差值
EN

Stack Overflow用户
提问于 2022-04-24 18:53:52
回答 2查看 70关注 0票数 0

我得到了一个解析到这个数组的git输出字符串,它给出了package.json文件中所有更改的依赖项:

代码语言:javascript
运行
复制
const data = [
    [ '-', '@date-io/moment', '1.3.13', '1', '3', '13' ],
    [ '+', '@date-io/moment', '1.3.14', '1', '3', '14' ],
    [ '-', '@emotion/react', '11.7.0', '11', '7', '0' ],
    [ '-', '@emotion/styled', '11.6.0', '11', '6', '0' ],
    [ '+', '@emotion/react', '11.8.2', '11', '8', '2' ],
    [ '+', '@emotion/styled', '11.8.1', '11', '8', '1' ]
]

第一个元素(+/ -)显示是否添加或删除了此更改。第二个元素是包名(这是连接两个数组的元素),下一个字段给出版本。现在,我需要迭代这个数组,以了解对每个包进行了哪种版本更改。因此,产出应该是:

代码语言:javascript
运行
复制
{
    '@date-io/moment': 'patch',
    '@emotion/react': 'minor',
    '@emotion/styled': 'minor'
}

我试着通过

代码语言:javascript
运行
复制
const result = {}
data.forEach(d => {
    result[d[1]] = bump // how to calculate `bump`?
})

但这并不能处理+-,也不计算版本凸点的类型。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-24 19:08:00

使用Array.prototype.reduce来减少您可以将数组缩减为一个对象,对于每个包,使用Array.prototype.find查找相应的更改。然后,您可以比较版本并确定其更改。

代码语言:javascript
运行
复制
const data = [
    [ '-', '@date-io/moment', '1.3.13', '1', '3', '13' ],
    [ '+', '@date-io/moment', '1.3.14', '1', '3', '14' ],
    [ '-', '@emotion/react', '11.7.0', '11', '7', '0' ],
    [ '-', '@emotion/styled', '11.6.0', '11', '6', '0' ],
    [ '+', '@emotion/react', '11.8.2', '11', '8', '2' ],
    [ '+', '@emotion/styled', '11.8.1', '11', '8', '1' ]
];

const changes = data.reduce((t, [type, name, , major, minor, patch], i, arr) => {
    if (type === "+") {
        const match = arr
          .find(([type, pName]) => type === "-" && pName === name);
        if (!match) {
          return t; // handle no match here
        }
        const [, , , pMajor, pMinor, pPatch] = match;
        return {
            ...t,
            [name]: pMajor !== major ? "major" :
                pMinor !== minor ? "minor" :
                "patch"
        }
    }
    return t;
}, {});

console.log(changes);

票数 3
EN

Stack Overflow用户

发布于 2022-04-24 19:26:31

subtractions

  • Loop
  • 在所有添加的基础上创建一个Map,并使用映射将其还原为所需的对象。

代码语言:javascript
运行
复制
const data = [
  ["-", "@date-io/moment", "1.3.13", "1", "3", "13"],
  ["+", "@date-io/moment", "1.3.14", "1", "3", "14"],
  ["-", "@emotion/react", "11.7.0", "11", "7", "0"],
  ["-", "@emotion/styled", "11.6.0", "11", "6", "0"],
  ["+", "@emotion/react", "11.8.2", "11", "8", "2"],
  ["+", "@emotion/styled", "11.8.1", "11", "8", "1"],
];

const subMap = new Map(data.filter((d) => d[0] === "-").map((d) => [d[1], d]));

const additions = data.filter((d) => d[0] === "+");

const updates = additions.reduce((updates, addition) => {
  const pkgName = addition[1];
  const [maj, min, patch] = addition.slice(-3);
  const [oldMaj, oldMin, oldPatch] = subMap.get(pkgName).slice(-3);

  if (maj === oldMaj && min === oldMin && patch >= oldPatch) {
    updates[pkgName] = "patch";
  } else if (maj === oldMaj && min >= oldMin) {
    updates[pkgName] = "minor";
  } else {
    updates[pkgName] = "major";
  }

  return updates;
}, {});

console.log(updates);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71991432

复制
相关文章

相似问题

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