【问题标题】:How to Return Values from filter of filter?如何从过滤器的过滤器返回值?
【发布时间】:2020-03-14 13:40:09
【问题描述】:

我想让所有以数学为科目的学生

var student = [{
  name: 'XYZ',
  age: 15,
  subject: ['Maths', 'Science'],
}, {
  name: 'XYZ',
  age: 15,
  subject: ['Hindi', 'Science'],
}, {
  name: 'XYZ',
  age: 15,
  subject: ['Maths', 'English'],
}];

我已经尝试过了,但不起作用:

student.filter(x=>x.subject.filter(y=>y=='Maths'));

任何帮助将不胜感激

【问题讨论】:

    标签: javascript typescript ecmascript-6


    【解决方案1】:

    需要结合filter()宽度some()判断是否有主题Maths

    var student = [{
        name: 'XYZ',
        age: 15,
        subject: ['Maths', 'Science'],
      },
      {
        name: 'XYZ',
        age: 15,
        subject: ['Hindi', 'Science'],
      },
      {
        name: 'XYZ',
        age: 15,
        subject: ['Maths', 'English'],
      }
    ];
    
    console.log(student.filter(x => x.subject.some(y => y == 'Maths')));

    【讨论】:

      【解决方案2】:

      这样试试

      student.filter(x=>x.subject.indexOf('Maths')!=-1);
      

      【讨论】:

        【解决方案3】:
        student.filter(x => x.subject.some(y => y == 'Maths')
        

        【讨论】:

          【解决方案4】:

          您只需在filter 中使用includes

           var student=[
              {
                name:'XYZ',
                age:15,
                subject:['Maths','Science'],
              },
              {
                name:'XYZ',
                age:15,
                subject:['Hindi','Science'],
              },
              {
                name:'XYZ',
                age:15,
                subject:['Maths','English'],
              }
             ]
           student=student.filter(x=>x['subject'].includes('Maths'));
           console.log(student);
           

          【讨论】:

            【解决方案5】:

            你很接近。要搜索数组中的第一个匹配项,请使用 indexOf 函数。

            这将返回可以在数组中找到给定元素的第一个索引,如果不存在,则返回 -1。

            所以我们需要检查结果是 > -1 表明我们有匹配。

            查看sn-p:

            var student = [{
                name: 'XYZ',
                age: 15,
                subject: ['Maths', 'Science']
              },
              {
                name: 'XYZ',
                age: 15,
                subject: ['Hindi', 'Science']
              },
              {
                name: 'XYZ',
                age: 15,
                subject: ['Maths', 'English']
              }
            ];
            
            console.log(student.filter(x => x.subject.indexOf('Maths') > -1));

            【讨论】:

              【解决方案6】:

              你可以在 typescript 中使用 includes() 方法

              var student = [{
                  name: 'XYZ',
                  age: 15,
                  subject: ['Maths', 'Science'],
                },
                {
                  name: 'XYZ',
                  age: 15,
                  subject: ['Hindi', 'Science'],
                },
                {
                  name: 'XYZ',
                  age: 15,
                  subject: ['Maths', 'English'],
                }
              ];
              
              console.log(student.filter(x => x.subject.includes('Maths')));

              【讨论】:

                【解决方案7】:

                这已经得到了更详细的回答:-

                https://stackoverflow.com/a/38375768/7562674

                根据您的情况:-

                  var st=student.filter((stud) => 
                  stud.subject.some((subElement) => subElement === "Maths")
                 );
                  console.log(st)
                

                【讨论】:

                • 谢谢,我试着找了,没来得及问了
                【解决方案8】:

                var student = [{
                  name: 'XYZ',
                  age: 15,
                  subject: ['Maths', 'Science'],
                }, {
                  name: 'XYZ',
                  age: 15,
                  subject: ['Hindi', 'Science'],
                }, {
                  name: 'XYZ',
                  age: 15,
                  subject: ['Maths', 'English'],
                }];
                
                let findResult = (subject) => student.filter(o => o.subject.find( i => i == subject ));
                let result = findResult('Maths');
                console.log(result);

                您可以使用 filter methodfind method 返回值 提供的数组中满足提供的第一个元素的 测试功能。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2017-12-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-04-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-02-23
                  相关资源
                  最近更新 更多