【问题标题】:Find specific key value in array of objects using nodejs使用nodejs在对象数组中查找特定键值
【发布时间】:2018-06-25 23:57:25
【问题描述】:

我们有一个像

这样的 JSON 对象
var jsons = {
    "LAPTOP": [{
        "productId": "123"
    }],
    "DESKTOP": [{
        "productId": "456"
    }],
    "MOUSE": [{
        "productId": "789"
    }, {
        "productId": "012"
    }],
    "KEY-BOARD": [{
        "productId": "345"
    }]
}

如果我们搜索 { "productId": "012" } 它应该返回键 DESKTOP 如果我们可以使用 lodash 那就太好了

【问题讨论】:

    标签: javascript arrays json node.js lodash


    【解决方案1】:

    使用 lodash 的解决方案:

    let result = _(jsons)
        .pickBy(item => _.some(item, {productId: '123'}))
        .keys()
        .head();
    

    首先,我们找到值包含的键和具有匹配 productId 的对象。然后我们从键集合中取出第一个键。

    【讨论】:

      【解决方案2】:

      试试这个

      var jsons = {
      "LAPTOP": [{
          "productId": "123"
      }],
      "DESKTOP": [{
          "productId": "456"
      }],
      "MOUSE": [{
          "productId": "789"
      }, {
          "productId": "012"
      }],
      "KEY-BOARD": [{
          "productId": "345"
      }]};
      
      var result = Object.keys(jsons).find((key) => {
      	   return jsons[key].find((item) => item.productId === '123')
          });
      
      console.log(result);
          

      【讨论】:

      • 我投票是因为它经过优化,不会做不必要的循环。
      【解决方案3】:

      没有LODASH,你也可以拥有这样的东西

      var toSearch = 789;
      Object.keys(jsons).forEach((key) => {
        if(jsons[key].find((pid) => pid.productId == toSearch)){
          console.log(key)
        }
      })
      

      【讨论】:

        【解决方案4】:

        var jsons = {
        "LAPTOP": [{
            "productId": "123"
        }],
        "DESKTOP": [{
            "productId": "456"
        }],
        "MOUSE": [{
            "productId": "789"
        }, {
            "productId": "012"
        }],
        "KEY-BOARD": [{
            "productId": "345"
        }]
        };
        
        var id = "789";
        for(item in jsons){
          jsons[item].forEach(function(data){
            if(data.productId == id){
              console.log(item);
            }
          });
        }

        【讨论】:

          【解决方案5】:

          您可以像这样使用 Javascript 的 key in object for 循环语法:

          var jsons = {
          "LAPTOP": [{
              "productId": "123"
          }],
          "DESKTOP": [{
              "productId": "456"
          }],
          "MOUSE": [{
              "productId": "789"
          }],
          "KEY-BOARD": [{
              "productId": "345"
          }]};
          
          var searchFor = "789";
          
          for(var key in jsons) 
            if(jsons.hasOwnProperty(key))
              if(jsons[key][0] && jsons[key][0].productId === searchFor)
                alert(key); // MOUSE

          【讨论】:

            【解决方案6】:

            您可以使用keysfind

            var jsons = { "LAPTOP": [{ "productId": "123" }], "DESKTOP": [{ "productId": "456" }], "MOUSE": [{ "productId": "789" }, { "productId": "012" }], "KEY-BOARD": [{ "productId": "345" }] },
                value = { "productId": "012" };
            
            var result = _.find(_.keys(jsons), key => _.find(jsons[key], value));
            console.log(result);
            <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

            【讨论】:

              【解决方案7】:

              考虑使用object-scan。一旦你把头绕在它周围,它就会很强大。

              // const objectScan = require('object-scan');
              
              const search = (term, input) => {
                const r = objectScan(['**.productId'], {
                  abort: true,
                  rtn: 'key',
                  filterFn: ({ value }) => value === term
                })(input);
                return r === undefined ? r : r[0];
              };
              
              const jsons = { LAPTOP: [{ productId: '123' }], DESKTOP: [{ productId: '456' }], MOUSE: [{ productId: '789' }, { productId: '012' }], 'KEY-BOARD': [{ productId: '345' }] };
              
              console.log(search('012', jsons));
              // => MOUSE
              .as-console-wrapper {max-height: 100% !important; top: 0}
              <script src="https://bundle.run/object-scan@13.8.0"></script>

              免责声明:我是object-scan的作者

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-07-15
                • 2014-08-21
                • 1970-01-01
                • 2018-03-01
                • 2020-07-22
                • 2020-12-20
                • 2020-01-18
                相关资源
                最近更新 更多