如果在数组中找到匹配值,则返回True

时间:2018-03-16 21:43:49

标签: javascript ecmascript-6

我觉得这应该很容易,但我遇到了寻找解决方案的问题。

我有一系列文件扩展名:

var items = ["PDF", "XLS"]

我还有一个文件对象数组:

files = [{format: "TXT"},{format: "PDF"}]

我喜欢一个可以传递文件对象数组的函数,如果任何文件的格式都在items数组中,那么它应该返回true。

提前感谢您的帮助。

function hasItemExtension() {
  files.forEach(file => {
    if(items.indexOf(file.format) != -1) {
      return true;
    }
  }
};

2 个答案:

答案 0 :(得分:0)

我发现你试图用forEach()打破return,显然根据doc无法完成:

  

除了by之外,没有办法停止或中断forEach()循环   抛出一个例外。如果需要这样的行为,请使用forEach()方法   是错误的工具。使用普通循环或for...of代替....

我已经找到了这个小例子,我设置了布尔变量并在匹配时修改它:

var items = ['PDF', 'XLS'];

var files = [{ format: 'PDF' }, { format: 'XLS' }];

function hasItemExtension(items, files) {
	let result = false;
	
	files.forEach(function(file){
		let f = file.format;
		if (items.indexOf(f) !== -1){
			result = true;
		}
	});
	return result;
}

let sol = hasItemExtension(items, files);

console.log(sol);

答案 1 :(得分:0)

只需使用javascript&#39的array.some()方法



    var items = ["PDF", "XLS"]
    
    var files = [{format: "TXT"},{format: "PDF"}]
    
    console.log(files.some(file => items.indexOf(file.format) > -1))