如何计算第二个位置具有相同值的两个数组的差异

用户3142695

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

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' ]
]

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

{
    '@date-io/moment': 'patch',
    '@emotion/react': 'minor',
    '@emotion/styled': 'minor'
}

我试图通过做

const result = {}
data.forEach(d => {
    result[d[1]] = bump // how to calculate `bump`?
})

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

撤消

使用Array.prototype.reducereduce可以将数组reduced成一个对象,并为每个包使用Array.prototype.find找到相应的变化。然后您可以比较版本并确定其更改。

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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我有两个数组,第一个数组中的值与第二个数组的 ID 字段中的值相同

JavaScript 比较两个数组并将第二个数组中具有相同属性值的项推送到第一个数组

比较两个对象数组,并删除第二个对象数组中具有相同属性值的项

两个数组,长度相同。如果第一个数组值等于 true 从第二个数组中获取值

比较两个数组,并显示第一个数组中具有第二个数组中的键的项

如果页面具有两个相同的格式,如何访问第二个输入元素?

比较两个数组,如果找到相同的键,则从第二个数组获取值

用第二个数组的两个值替换一个数组的数据

具有两个数组的方法。如果第一个数组中的值返回不为null,则必须将另一个数组中的相应元素用作第二个方法的参数

PHP比较两个数组,但第一个数组的所有值都需要在第二个

Perl:组合两个哈希数组的值,并使第二个数组的值成为输出哈希的键

如何比较两个数组,删除第二个中缺少的第一个元素并推送差异

如何为第一个数组中的每个位置迭代多个数组迭代第二个数组?

Python:比较两个数组的所有元素并修改第二个数组

如何附加两个数组,但第二个数组为宽格式?Python

如何将两个数组列表中的值相乘,然后将其添加到第二个数组列表中?

比较两个数组并查找第二个数组中缺少的项目

将两个数组与PHP结合使用。第二个数组是多维的

如何检查两个数组在每个位置是否具有相同的参数,我

Haskell,找到第二个元素最少的tupel,如果第二个元素具有两个相同值的tuple,则使用第一个元素进行排序

查找名称中第二个位置具有特定字符的文件

合并两个数组,第一个基于值,第二个基于键-php

Php,使用第一个键和第二个值连接两个数组

如何制作两个数组,其中第一个是值,第二个是这些值的键?

if elseif具有三个条件的语句,其中第二个条件在两个数字之间

结构数组的第二个位置有垃圾

如何使用python中的pandas仅从具有两个数据框的网页中选择第二个数据框?

如何从右边获取“ _”的第二个位置的值?

比较两个数组并显示第一个数组中不存在的第二个数组值