[英]Check if Filename Already Exists in an Array
如何检查数组中是否已存在某个文件名? 例如,在初始加载时,我从服务器获取了一些文件:
var initialFiles = ['file1_1','file2_0','file3_3','file4_2','file5_6'];
我将它们推入数组并在sessionStorage中进行设置:
filesArray.push(initialFiles);
sessionStorage.setItem('file-names', JSON.stringify(filesArray));
然后,在用户与网站互动之后,我得到了更多文件:
var newFiles = ['file1_1', 'file2_0', 'file1_2', 'file3_5', 'file4_6'];
您可以看到file1_1
和file2_0
已经加载。 如何不将这些文件名添加到数组中?
在此处查看示例: http : //jsbin.com/hiyefexudi/edit?html,js,console
您可以使用indexOf == -1检查新数组中的每个文件是否在旧文件中
小提琴: https : //jsfiddle.net/L42h7uhm/
var initialFiles = ['file1_1', 'file2_0', 'file3_3', 'file4_2', 'file5_6'];
var newFiles = ['file1_1', 'file2_0', 'file1_2', 'file3_5', 'file4_6'];
newFiles.forEach(function (file) {
console.log(initialFiles.indexOf(file) == -1);
});
您可以连接两个数组并过滤出非唯一项。
var initialFiles = ['file1_1', 'file2_0', 'file3_3', 'file4_2', 'file5_6'];
var newFiles = ['file1_1', 'file2_0', 'file1_2', 'file3_5', 'file4_6'];
var newArray = initialFiles.concat(newFiles);
var uniqueArray = newArray.filter(function(item, pos) {
return newArray.indexOf(item) == pos;
});
console.log(uniqueArray);
使用ES6语义(现代浏览器,转译的代码或最新的node.js),您可以更有效地使用Set
对象,该对象将自动将重复项排除在外。
var files = new Set(['file1_1','file2_0','file3_3','file4_2','file5_6']);
var newFiles = ['file1_1', 'file2_0', 'file1_2', 'file3_5', 'file4_6'];
files.add(...newFiles);
sessionStorage.setItem('file-names', JSON.stringify(Array.from(files)));
工作演示: http : //jsfiddle.net/jfriend00/7d1dy1p7/
而且,Set对象也有很多polyfill,因为它是一个普遍有用的概念,尤其是对于此类对象。 这是我创建的一个: 在JavaScript中模仿集合?
或者,如果您试图找出newFiles
列表中的哪些项目实际上是新项目,而不是files
列表中的项目,则可以这样做。
var files = new Set(['file1_1','file2_0','file3_3','file4_2','file5_6']);
var newFiles = ['file1_1', 'file2_0', 'file1_2', 'file3_5', 'file4_6'];
var uniqueNewFiles = newFiles.filter(function(item) {
return !files.has(item);
});
然后,之后要更新现有文件列表,可以将它们添加到其中:
files.add(...uniqueNewFiles);
或者,使用功能更强大的Set对象 ,您可以这样做:
var files = new Set(['file1_1','file2_0','file3_3','file4_2','file5_6']);
var newFiles = new Set(['file1_1', 'file2_0', 'file1_2', 'file3_5', 'file4_6']);
var uniqueNewFiles = newFiles.difference(files);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.