【问题标题】:Filter JSON Object by comparing nested object inside it and other array using javascript or jquery通过比较其中的嵌套对象和使用 javascript 或 jquery 的其他数组来过滤 JSON 对象
【发布时间】:2016-05-25 08:53:46
【问题描述】:

假设我有var myVar = ['google','search','engine','results','count']

例如:JSON 对象 `

myJSON = [{
     'title' : 'Google',
     'url' : 'www.google.com',
     'tags' : ['google','search','engine']
},{
     'title' : 'Yahoo',
     'url' : 'www.yahoo.com',
     'tags' : ['Yahoo','search','engine','news']
},{
     'title' : 'MSN',
     'url' : 'www.msn.com',
     'tags' : ['msn','search','engine','news']
},{
     'title' : 'Facebook',
     'url' : 'www.facebook.com',
     'tags' : ['social','search','media','chat','friends']
},]

我想通过比较myJSON 中的两个数组myVartags 来过滤myJSON

假设myVar = ['search'] 过滤器应该返回myJSON 中的所有对象 如果myVar = ['engine'] 过滤器应该只返回myJSON 的3 个对象,其中myVar 数组与tags 数组匹配。

【问题讨论】:

    标签: jquery arrays json object filter


    【解决方案1】:

    试试这个

    var myVar = ['engine'];
    myJSON = [{
      'title': 'Google',
      'url': 'www.google.com',
      'tags': ['google', 'search', 'engine']
    }, {
      'title': 'Yahoo',
      'url': 'www.yahoo.com',
      'tags': ['Yahoo', 'search', 'engine', 'news']
    }, {
      'title': 'MSN',
      'url': 'www.msn.com',
      'tags': ['msn', 'search', 'engine', 'news']
    }, {
      'title': 'Facebook',
      'url': 'www.facebook.com',
      'tags': ['social', 'search', 'media', 'chat', 'friends']
    }];
    
    for (var i = 0; i < myVar.length; i++) {
      for (var j = 0; j < myJSON.length; j++) {
        if (JSON.stringify(myJSON[j]['tags']).indexOf(myVar[i]) >= 0) {
          console.log(myJSON[j]);
        }
      }
    }

    【讨论】:

      【解决方案2】:

      您可以使用数组的filtersome 函数,如下所示。

      var result = myJSON.filter(function(item){
        return item.tags.some(function(str){
              return myVar.indexOf(str) > -1;
        });
      });
      
      console.log(result);
      

      Demo

      【讨论】:

        【解决方案3】:

        您可以使用快速、简洁且易于理解的函数式方法:

        var myVar = ['engine']
        
        var myJSON = [{             'title' : 'Google',
                                      'url' : 'www.google.com',
                                      'tags' : ['google','search','engine']
                                    },{
                                      'title' : 'Yahoo',
                                      'url' : 'www.yahoo.com',
                                      'tags' : ['Yahoo','search','engine','news']
                                    },{
                                      'title' : 'MSN',
                                      'url' : 'www.msn.com',
                                      'tags' : ['msn','search','engine','news']
                                    },{
                                      'title' : 'Facebook',
                                      'url' : 'www.facebook.com',
                                      'tags' : ['social','search','media','chat','friends']
                                    }]
        
        var filtered = myJSON.filter(function(i){ 
           return myVar.reduce(function(result, current) { 
               return result || i.tags.some(function(v){ return v==current })  }, false)
           }) ;
        
        console.log("Filtered", filtered);
        

        有关详细信息,请参阅 reducefilter 数组函数参考。

        您不应该对对象进行字符串化并对它们使用字符串操作,这会引入额外的不必要的开销。

        【讨论】:

          猜你喜欢
          • 2021-08-22
          • 1970-01-01
          • 2020-08-09
          • 2019-10-15
          • 2020-09-17
          • 2017-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多