【问题标题】:Filter Records from JSON with Node or ES6使用 Node 或 ES6 从 JSON 中过滤记录
【发布时间】:2016-10-14 15:36:42
【问题描述】:

我不确定解决此问题的最佳方法。例如,我想迭代我的json 并查找所有在美国的公司。随着我的应用程序的增长,这个JSON 可能会变得更加复杂,例如在关卡、对象等方面。我只想知道人们使用JSONNode.js 过滤掉数据子集的简单搜索和/或ES6 或库,例如Lodash 等。

例如这个 json,我有什么方法可以搜索它并只撤回美国的那些公司?

[{
    "id": 0,
    "name": "Company1",
    "logoUrl": "/lib/assets/company1-logo.png",
    "location":{
      "country": "USA",
      "state": "California",
      "city": "Napa"
    },
    "active": false
  },
  {
    "id": 1,
    "name": "Company2",
    "logoUrl": "/lib/assets/company2-logo.png",
    "location":{
      "country": "Germany",
      "state": "",
      "city": "Berlin"
    },
    "active": false
  },
  {
    "id": 2,
    "name": "Company3",
    "logoUrl": "/lib/assets/company3-logo.png",
    "location":{
      "country": "USA",
      "state": "Michigan",
      "city": "Detroit"
    },
    "active": false
  }]

【问题讨论】:

  • 是的,我知道,但你可以在没有 ES6 的情况下使用节点,我只是说如果你愿意,请使用 ES6,无论哪种方式都没有关系,只是想办法过滤这个
  • 换句话说使用节点中间件来帮助过滤,或者使用普通的JS方法,或者使用你想要的任何想法或建议使用花哨的ES6

标签: javascript json node.js ecmascript-6


【解决方案1】:

您可以使用原生过滤功能。

const items = [{
    "id": 0,
    "name": "Company1",
    "logoUrl": "/lib/assets/company1-logo.png",
    "location":{
      "country": "USA",
      "state": "California",
      "city": "Napa"
    },
    "active": false
  },
  {
    "id": 1,
    "name": "Company2",
    "logoUrl": "/lib/assets/company2-logo.png",
    "location":{
      "country": "Germany",
      "state": "",
      "city": "Berlin"
    },
    "active": false
  },
  {
    "id": 2,
    "name": "Company3",
    "logoUrl": "/lib/assets/company3-logo.png",
    "location":{
      "country": "USA",
      "state": "Michigan",
      "city": "Detroit"
    },
    "active": false
  }]

const usItems = items.filter(v => v.location.country === 'USA')

【讨论】:

    【解决方案2】:

    您可以使用 JavaScript 的简单 .filter() 方法返回满足过滤器的结果列表。假设您的数据在可变数据中

    ES5

    data.filter(function(item) {
      return item.location.country === 'USA';
    });
    

    ES6:在 ES6 中,您可以使用箭头函数与

    data.filter((item) => {
      return item.location.country === 'USA';
    });
    

    var data = [{
        "id": 0,
        "name": "Company1",
        "logoUrl": "/lib/assets/company1-logo.png",
        "location":{
          "country": "USA",
          "state": "California",
          "city": "Napa"
        },
        "active": false
      },
      {
        "id": 1,
        "name": "Company2",
        "logoUrl": "/lib/assets/company2-logo.png",
        "location":{
          "country": "Germany",
          "state": "",
          "city": "Berlin"
        },
        "active": false
      },
      {
        "id": 2,
        "name": "Company3",
        "logoUrl": "/lib/assets/company3-logo.png",
        "location":{
          "country": "USA",
          "state": "Michigan",
          "city": "Detroit"
        },
        "active": false
      }];
    
    var res1 = data.filter(function(item) {
      return item.location.country === 'USA';
    });
    
    const res2 = data.filter((item) => {
      return item.location.country === 'USA';
    });
    
    console.log(res1);
    console.log(res2);

    【讨论】:

      【解决方案3】:

      在lodash中会是

      _.filter(data, function(item) {
        return item.location.country === 'USA';
      });
      

      【讨论】:

        【解决方案4】:

        使用 JavaScript 原生 Array#filter 方法和 ES6 arrow function

        var res = data.filter(v => v.location.country === 'USA');
        

        var data = [{
          "id": 0,
          "name": "Company1",
          "logoUrl": "/lib/assets/company1-logo.png",
          "location": {
            "country": "USA",
            "state": "California",
            "city": "Napa"
          },
          "active": false
        }, {
          "id": 1,
          "name": "Company2",
          "logoUrl": "/lib/assets/company2-logo.png",
          "location": {
            "country": "Germany",
            "state": "",
            "city": "Berlin"
          },
          "active": false
        }, {
          "id": 2,
          "name": "Company3",
          "logoUrl": "/lib/assets/company3-logo.png",
          "location": {
            "country": "USA",
            "state": "Michigan",
            "city": "Detroit"
          },
          "active": false
        }];
        
        var res = data.filter(v => v.location.country === 'USA');
        
        console.log(res);

        【讨论】:

        • 该死的,这比我想象的要容易
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-20
        • 2015-11-30
        • 2010-10-27
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多