【问题标题】:Filter array based property value [duplicate]基于过滤器数组的属性值
【发布时间】:2019-10-14 19:46:50
【问题描述】:

我有一个包含 13k 个对象的 JSON 文件。我只需要从中获取具有事件{ name: "Submitted"} 属性的对象。 events 是一个包含多个名称属性的对象数组。这是它的外观截图:

{
  "_id": "03c319a5-86d4-4ce6-ba19-1a50584cecb4",
  "_rev": "21-7cb67ebb46c485ff443995fc27bdd950",
  "doctype": "application",
  "events": [{
      "name": "change",
      "time": 1532547503182
    },
    {
      "name": "change",
      "time": 1532547503182
    },
    {
      "name": "submitted",
      "time": 1532547503182
    },
    {
      "name": "edited",
      "time": 1532547503182
    }
  ]
}

这就是我获取 json 文件中所有对象的方式:

$.getJSON("export.json", function(data) {
  var data = [];
  var arrays = data;

  var i;
  for (i = 0; i < arrays.length; i++) {
    console.log(arrays[i]);
  }
});

现在我需要将我进入arrays[i] 的所有具有events[name:submitted] 的对象推入doc[]。如何过滤结果?

【问题讨论】:

  • 为什么不从它的来源(后端)过滤它?我不确定如果您循环遍历 13k 个对象是否会产生影响。
  • @Eddie 这看起来像 PouchDB。由于它是一个使用 IndexedDB 的 JS 库,因此无法在后端进行真正的过滤。但是 PouchDB 中有一个查询功能,您应该看看它,因为它更有效。

标签: javascript jquery arrays json parsing


【解决方案1】:

您可以通过filter 方法过滤您的对象数组。

$.getJSON("export.json", function(data) {
  var data = [];
  var arrays = data;

  var newArray = arrays.filter(function (el) {
    return el.name == 'Submitted';
  });

  console.log(newArray);
});

您也可以使用ES6 arrow function在一行中完成

var newArray  = arrays.filter(el => el.name === 'Submitted')

【讨论】:

    【解决方案2】:

    您可以使用filter(),检查events数组中的每个元素,看看name是否等于submitted

    const object = {
      "_id": "03c319a5-86d4-4ce6-ba19-1a50584cecb4",
      "_rev": "21-7cb67ebb46c485ff443995fc27bdd950",
      "doctype": "application",
      "events": [{
          "name": "change",
          "time": 1532547503182
        },
        {
          "name": "change",
          "time": 1532547503182
        },
        {
          "name": "submitted",
          "time": 1532547503182
        },
        {
          "name": "edited",
          "time": 1532547503182
        }
      ]
    }
    
    const filtered  = object.events.filter(obj => obj.name === 'submitted')
    console.log(filtered)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2021-03-13
      • 2017-11-22
      • 2018-08-23
      • 2018-08-17
      • 2016-11-03
      相关资源
      最近更新 更多