繁体   English   中英

检查数组中是否已存在文件名

[英]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_1file2_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对象上的MDN参考


而且,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM