我有一个解析到这个数组的 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.reduce
reduce可以将数组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] 删除。
我来说两句