使用 indexOf 过滤数组

7
我正在尝试使用 indexOf 输出 events 数组中的前两个对象。
这并没有返回任何内容:
```javascript indexOf(events[0], events[1]); ```
var whiteList=['css','js'];

var events =[
    {file: 'css/style.css', type:'css'},
    {file: 'js/app.js', type:'js'},
    {file: 'index/html.html', type:'html'}
];

var fileList= events
    .filter(function(event){
    return event.type.indexOf(whiteList) >- 1 
  })

console.log(fileList);

如果我将函数更改为这样,它会返回css和js对象,尽管我希望它返回html对象。
var fileList= events
    .filter(function(event){
    return event.type.indexOf('html') 
  })

1
event.type.indexOf('html') 返回 0('h' 的位置)- 0 被解释为 false - J. Titus
你对 whatever.indexOf([1,2,3]) 有什么期望? - Redu
2个回答

15

你做错了,应该这样做。

var whiteList = ['css', 'js'];

var events = [{
  file: 'css/style.css',
  type: 'css'
}, {
  file: 'js/app.js',
  type: 'js'
}, {
  file: 'index/html.html',
  type: 'html'
}];

var fileList = events.filter(function(event) {
  return whiteList.indexOf(event.type) > -1
})

console.log(fileList)


2
这太完美了,我能够在我正在编写的另一段代码中使用它。谢谢! - Chef1075

7

在ES6中,您可以使用Set来更快地访问大型数据集。

var whiteList = ['css', 'js'],
    whiteSet = new Set(whiteList),
    events = [{ file: 'css/style.css', type: 'css' }, { file: 'js/app.js', type: 'js' }, { file: 'index/html.html', type: 'html' }],
    fileList = events.filter(event => whiteSet.has(event.type));

console.log(fileList);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接