有没有比添加大量繁琐的额外内容更好/更智能的方法来过滤JavaScript?
我有一个大约30个对象的数组。有些对象的行为不同,所以在我的测试中,我需要过滤掉它们 目前我正在做这样的事情:有没有比添加大量繁琐的额外内容更好/更智能的方法来过滤JavaScript?,javascript,arrays,filter,Javascript,Arrays,Filter,我有一个大约30个对象的数组。有些对象的行为不同,所以在我的测试中,我需要过滤掉它们 目前我正在做这样的事情: myArray.filter(item => item.name !== 'something' && item.name !== 'somethingElse' && item.name !== 'a third thing') 这很累人、难看而且容易出错。有没有什么我可以把它做得更好一点的 第二,对于我的第二次测试,我想测试这些项目。是否有任
myArray.filter(item => item.name !== 'something' && item.name !== 'somethingElse' && item.name !== 'a third thing')
这很累人、难看而且容易出错。有没有什么我可以把它做得更好一点的
第二,对于我的第二次测试,我想测试这些项目。是否有任何方法可以取消此筛选器,使其仅包含这些项?目前我必须做一件非常辛苦的事:
myArray.filter(item => item.name === 'something' && item.name === 'somethingElse' && item.name === 'a third thing')
这不好。有什么想法吗?来自此
myArray.filter(item =>
item.name !== 'something' &&
item.name !== 'somethingElse' &&
item.name !== 'a third thing'
);
反演是通过使用
最后一个可以用集合
编写
var items = new Set(['something', 'somethingElse', 'a third thing'],
filtered = myArray.filter(({ name }) => items.has(name));
以及第一个
var items = new Set(['something', 'somethingElse', 'a third thing'],
filtered = myArray.filter(({ name }) => !items.has(name));
您可以将要筛选的所有项目名称保存在一个数组中,然后基于该数组进行筛选
const filteredItemNames = ['something', 'somethingElse', 'a third thing'];
const filteredItems = myArray.filter(item => !filteredItemNames.includes(item.name));
你也可以通过这样做很容易地逆转
const filteredItems = myArray.filter(item => filteredItemNames.includes(item.name));
您可以使用以下方法:
反之亦然
myArray.filter(obj => !desiredObjectNames.includes(obj);
您可以创建一个数组,在其中放置所有应拒绝/接受的名称
var reject = [
'something',
'somethingElse',
'a third thing'
]
var accept= [
'something',
'somethingElse',
'a third thing'
]
// reject if in array
myArray.filter(item => reject.indexOf(item) === -1)
// just accept if in array
myArray.filter(item => accept.indexOf(item) >= 0)
最后一个不能同时有不同的值。@NinaScholz很抱歉应该是
|
myArray.filter(obj => !desiredObjectNames.includes(obj);
var reject = [
'something',
'somethingElse',
'a third thing'
]
var accept= [
'something',
'somethingElse',
'a third thing'
]
// reject if in array
myArray.filter(item => reject.indexOf(item) === -1)
// just accept if in array
myArray.filter(item => accept.indexOf(item) >= 0)