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

时间:2015-09-16 20:27:06

标签: javascript arrays

如何检查数组中是否已存在某个文件名?例如,在初始加载时,我从服务器获取一些文件:

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

3 个答案:

答案 0 :(得分:1)

您可以使用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);
});

答案 1 :(得分: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);

答案 2 :(得分:0)

使用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/

MDN reference on the Set object

而且,Set对象也有很多polyfill,因为它是一个普遍有用的概念,特别是对于这样的事情。这是我创建的一个:Mimicking sets in 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 object,您可以这样做:

 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);