非常感谢您在此方面的所有帮助。
我有两个数组:
我需要输出第三个数组,在这种情况下,FinalArray
包含一个不在ArrayFileNameWExt
数组中的所有ArrayFileName
的列表。
我知道我在寻找匹配项上有一个话题,这很棒。但是我在寻找不匹配的物品时遇到了问题。我将==比较更改为!==,这给了我一个文件名一百次。
Maxine,谢谢您的帮助
var ArrayFileName = ['one', 'two', 'three', 'three', 'five', 'six', 'ten'];
var ArrayFileNameWExt = ['one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm'];
var FinalArray = [];
for (var i = 0; i < ArrayFileName.length; i++) {
for (var j = 0; j < ArrayFileNameWExt.length; j++) {
var temp = ArrayFileNameWExt[j].split(".");
if(ArrayFileName[i]!==temp[0]){
FinalArray.push(ArrayFileNameWExt[j]);
break;
}
}
}
答案 0 :(得分:2)
您可以使用简单的过滤器,并返回所有拆分第一部分不在ArrayFileName
数组中的项。
var ArrayFileName = ['one', 'two', 'three', 'three', 'five', 'six', 'ten'];
var ArrayFileNameWExt = ['one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm'];
var final = ArrayFileNameWExt.filter(function(item) {
return !ArrayFileName.includes(item.split('.')[0]);
})
console.log(final);
如果您使用的是JavaScript的较旧版本,则includes
Array方法可能不存在。可以使用以下代码。
var ArrayFileName = ['one', 'two', 'three', 'three', 'five', 'six', 'ten'];
var ArrayFileNameWExt = ['one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm'];
var final = ArrayFileNameWExt.filter(function(item) {
var name = item.split('.')[0];
for (var i = 0; i < ArrayFileName.length; i++) {
if (ArrayFileName[i] === name) return false;
}
return true;
})
console.log(final);
答案 1 :(得分:2)
重复使用您提供给我们的代码,我做到了:我互换了两个for循环,并使用变量(found
)跟踪找到的项目。在外部循环中通过ArrayFileNameWExt
进行迭代也更好,因为我们减少了对split
函数的调用次数。
var ArrayFileName = ['one', 'two', 'three', 'three', 'five', 'six', 'ten'];
var ArrayFileNameWExt = ['one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm'];
var FinalArray = [];
for (var i = 0; i < ArrayFileNameWExt.length; ++i) {
var temp = ArrayFileNameWExt[i].split(".");
var found = false;
for (var j = 0; j < ArrayFileName.length; ++j) {
if (ArrayFileName[j] === temp[0]) {
found = true;
break;
}
}
if (!found) {
FinalArray.push(ArrayFileNameWExt[i]);
}
}
console.log(FinalArray);
干杯!
答案 2 :(得分:1)
我会使用.filter
和.includes
-
const fileNames =
['one', 'two', 'three', 'three', 'five', 'six', 'ten']
const fileNamesWExt =
[ 'one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm' ]
const basename = filename =>
filename.split(/\.[^.]+$/)[0]
const finalArray =
fileNamesWExt.filter(f => ! fileNames.includes(basename(f)))
console.log(finalArray)
// [ 'eleven.cgm' ]
请注意我们对basename
的实现,请注意仅删除最后一个扩展名-
const basename = filename =>
filename.split(/\.[^.]+$/)[0]
console.log
( basename ("cat") // "cat"
, basename ("cat.dog") // "cat"
, basename ("cat.dog.eel") // "cat.dog"
, basename ("cat.dog.eel.fox") // "cat.dog.eel"
)
如果不能使用箭头功能,则可能使用的是JavaScript的旧版本。在这种情况下,您还需要填充.includes
-
Array.prototype.includes = function (x, init) {
for (var i = init || 0; i < this.length; i = i + 1)
if (this[i] === x)
return true;
return false;
};
var fileNames =
['one', 'two', 'three', 'three', 'five', 'six', 'ten'];
var fileNamesWExt =
[ 'one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm' ];
var basename = function (filename) {
return filename.split(/\.[^.]+$/)[0];
};
var finalArray =
fileNamesWExt.filter(function (f) {
return ! fileNames.includes(basename(f));
});
console.log(finalArray);
// [ 'eleven.cgm' ]
答案 3 :(得分:1)
也许编辑器会这样
var ArrayFileName = ['one', 'two', 'three', 'three', 'five', 'six', 'ten'];
var ArrayFileNameWExt = ['one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm'];
var FinalArray = [];
for (var i = 0; i < ArrayFileNameWExt.length; i++) {
var matchFound = false;
for (var j = 0; j < ArrayFileName.length; j++) {
var temp = ArrayFileNameWExt[i].split(".");
if(ArrayFileName[j]==temp[0]){
matchFound = true;
break;
}
}
if(!matchFound){
FinalArray.push(ArrayFileNameWExt[i])
}
}
console.log(FinalArray)
答案 4 :(得分:0)
Array#filter
使您可以包含(或删除)满足特定条件的元素。
Array#inludes
返回数组中是否包含某些元素。
String#split
返回一个数组,其中包含使用所需的分隔符(在本例中为点)分割字符串的元素。
var ArrayFileName = ['one', 'two', 'three', 'three', 'five', 'six', 'ten'];
var ArrayFileNameWExt = ['one.txt', 'two.txt', 'three.txt', 'ten.wmf', 'eleven.cgm'];
var FinalArray = [];
FinalArray = ArrayFileNameWExt.filter (filenameWExt => !ArrayFileName.includes(filenameWExt.split('.')[0]));
console.log(FinalArray);
任何其他问题请在评论中让我知道,我会解释