Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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_Ecmascript 6_Lodash - Fatal编程技术网

在多个条件下筛选javascript数组

在多个条件下筛选javascript数组,javascript,arrays,filter,ecmascript-6,lodash,Javascript,Arrays,Filter,Ecmascript 6,Lodash,我有一个过滤数组的输入框,只显示那些匹配项 let songs = [ {name: 'Let It Be', artist: 'The Beatles}, {name: 'Lady Madonna', artist: 'The Beatles }, {name: 'Mama Mia', artist: 'The Beatles} ]; 在下面的示例中,它将仅按名称匹配 let value = 'name'; let q = 'Let it be' // value ente

我有一个过滤数组的输入框,只显示那些匹配项

let songs = [
   {name: 'Let It Be', artist: 'The Beatles},
   {name: 'Lady Madonna', artist: 'The Beatles },
   {name: 'Mama Mia', artist: 'The Beatles}
];
在下面的示例中,它将仅按名称匹配

let value = 'name';
let q = 'Let it be' // value entered in input box;

let songFilter = songs.filter(function(song) {
   return song[value].toString().toLowerCase().indexOf(q) != -1; // returns true or false
});
然后,当我在输入框中输入
顺其自然
时,它将显示return just
“顺其自然”
。但是,我想按两首歌过滤,所以如果我输入
随它去吧,麦当娜夫人
我希望它返回两首歌


我已经采取了很多方法,但不知道如何让它工作。我也有
lodash
,如果这样更容易解决的话。

您可以使用
集合
为已输入的条目(在
拆分
之后)设置关键帧。这样你就可以在固定的时间内看到是否有匹配。此处,
Set
作为上下文传递给
filter
,因此它可以被
this
引用:

let songFilter = songs.filter(function(song) {
    ['let it be', 'lady madonna'].indexOf(song[value].toString().toLowerCase()) > -1
});
让歌曲=[
{姓名:'顺其自然',艺术家:'披头士'},
{姓名:'麦当娜夫人',艺术家:'披头士'},
{名字:'Mama Mia',艺术家:'The Beatles'}
];
函数查找(byKey、valueCsv){
返回歌曲。过滤器(功能(歌曲){
返回此.has(歌曲[byKey].toLowerCase())
},新集合(valueCsv.trim().toLowerCase().split(/\s*,\s*/));
}
songInput.addEventListener('input',function(){
matches.textContent=JSON.stringify(find('name',songInput.value),null,2);
});
键入歌曲名称:
使用
数组#过滤器
数组#查找

让歌曲=[
{姓名:'顺其自然',艺术家:'披头士'},
{姓名:'麦当娜夫人',艺术家:'披头士'},
{名字:'Mama Mia',艺术家:'The Beatles'}
];
让值='name';
let q=‘随它去吧,麦当娜夫人’//输入框中输入的值;
设splitQ=q.split(',').map(sq=>sq.toLowerCase());
让songFilter=songs.filter(s=>splitQ.find(sq=>s[value].toLowerCase().indexOf(sq)>-1)!==未定义);

console.log(songFilter)正如我在上面的评论中所说:

让歌曲=[
{姓名:'顺其自然',艺术家:'披头士'},
{姓名:'麦当娜夫人',艺术家:'披头士'},
{名字:'Mama Mia',艺术家:'The Beatles'}
];
让值='name';
让q=‘随它去吧,麦当娜夫人’;
//第一:将q值拆分为多首歌曲(并使其小写)
设qSongs=q.split(',').map(e=>e.toLowerCase());
//第二:过滤上述结果数组中的歌曲(qSongs)
//对于歌曲数组中的每首歌曲
让歌曲过滤器=歌曲。过滤器(歌曲=>
//查看qSongs数组中是否存在某些qsong,以便song的值等于qsong
一些(qsong=>
song[value].toLowerCase().indexOf(qsong)!=-1
)
);
console.log(songFilter)
让歌曲=[
{姓名:'顺其自然',艺术家:'披头士'},
{姓名:'麦当娜夫人',艺术家:'披头士'},
{名字:'Mama Mia',艺术家:'The Beatles'}
];
让值='name';
让q=‘随它去吧,麦当娜夫人’;
let songFilter=uu.filter(歌曲,(歌曲)=>{
设regex=newregexp(q.replace(/\s*,\s*/g,,|'),'gi');
返回正则表达式测试(宋[值]);
});
console.log(songFilter)

q
拆分为一个名称数组,然后在
过滤器中使用
一些