基于过滤器数组的属性值
Posted
技术标签:
【中文标题】基于过滤器数组的属性值【英文标题】: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 中有一个查询功能,您应该看看它,因为它更有效。 【参考方案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)
【讨论】:
以上是关于基于过滤器数组的属性值的主要内容,如果未能解决你的问题,请参考以下文章
基于具有唯一值的数组创建多个动态选择过滤器以过滤 Vue.js 中的另一个数组