Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有比添加大量繁琐的额外内容更好/更智能的方法来过滤JavaScript?_Javascript_Arrays_Filter - Fatal编程技术网

有没有比添加大量繁琐的额外内容更好/更智能的方法来过滤JavaScript?

有没有比添加大量繁琐的额外内容更好/更智能的方法来过滤JavaScript?,javascript,arrays,filter,Javascript,Arrays,Filter,我有一个大约30个对象的数组。有些对象的行为不同,所以在我的测试中,我需要过滤掉它们 目前我正在做这样的事情: myArray.filter(item => item.name !== 'something' && item.name !== 'somethingElse' && item.name !== 'a third thing') 这很累人、难看而且容易出错。有没有什么我可以把它做得更好一点的 第二,对于我的第二次测试,我想测试这些项目。是否有任

我有一个大约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'
);
反演是通过使用

最后一个可以用
集合
编写

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)