所以我有一个节点脚本,当前吐出两个数组:
$ yarn run header:test
yarn run v0.22.0
$ ./bin/create_header.js
[ 'LucidEventIcon.md', 'LucidStates.md' ] [ 'LucidEventIcon.js', 'LucidStates.js' ]
我想做的是使用某种查找方法来说:
" LucideEventIcon.md应匹配LucidEventIcon.js",我关心的是匹配名称。我需要保留文件扩展名,以便稍后将.md
的争议添加到.js
如何在名称上匹配,无论扩展名如何?在循环第一个并检查第二个数组时?
对于第一个数组中的两个元素,预期结果应为true,它们应与第二个数组中的两个JS文件匹配。
答案 0 :(得分:1)
您可以创建自己的小函数来比较基本名称(没有文件扩展名),然后循环遍历第一个为两个数组调用此函数的数组。 path
模块可用于解析基本名称(无扩展名或路径)。
const path = require('path');
function compareFileNames(f1, f2) {
let name1 = path.parse(f1).name;
let name2 = path.parse(f2).name;
return name1 === name2;
}
我不清楚你想要什么类型的输出,但你可以创建一个布尔数组,告诉你什么匹配。如果两个数组是arr1
和arr2
:
let results = arr1.map(function(f1, index) {
let f2 = arr2[index];
return typeof f2 === "string" && compareFileNames(f1, f2);
});
如果您只是想看看它们是否匹配:
let match = arr1.every(function(f1, index) {
let f2 = arr2[index];
return typeof f2 === "string" && compareFileNames(f1, f2);
});
答案 1 :(得分:-2)
更新了isArraysEqual函数,不修改Array.prototype。
function isArraysEqual(arr1, arr2, strict) {
if (!arr1 || !arr2)
return false;
if (arr1.length != arr2.length)
return false;
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] instanceof Array && arr2[i] instanceof Array) {
if (!isArraysEqual(arr1[i], arr2[i], strict))
return false;
}
else if (strict && arr1[i] != arr2[i]) {
return false;
}
else if (!strict) {
return isArraysEqual(arr1.sort(), arr2.sort(), true);
}
}
return true;
}
const mdFiles = [ 'LucidEventIcon.md', 'LucidStates.md' ].map((file)=>file.split('.')[0]);
const jsFiles = [ 'LucidEventIcon.js', 'LucidStates.js' ].map((file)=>file.split('.')[0]);
const isEqual = isArraysEqual(mdFiles, jsFiles, false);