У меня есть файл JSON, содержащий 13 тыс. объектов. Мне нужно получить от него только те объекты, у которых есть свойство events { 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.info(arrays[i]);
}
});
Теперь мне нужно втолкнуть все объекты, у которых есть events[name:submitted]
я попадаю arrays[i]
в doc[]
. Как я могу отфильтровать результаты?
@ Эдди, это похоже на PouchDB. Поскольку это JS-библиотека, использующая IndexedDB, ее нельзя фильтровать на бэкэнде. Но в PouchDB есть функция запросов, на которую стоит обратить внимание, так как она более эффективна.
Вы можете отфильтровать свой массив объекта методом filter
.
$.getJSON("export.json", function(data) {
var data = [];
var arrays = data;
var newArray = arrays.filter(function (el) {
return el.name == 'Submitted';
});
console.info(newArray);
});
Вы также можете сделать это в одну строку, используя ES6 arrow function
var newArray = arrays.filter(el => el.name === 'Submitted')
Вы можете использовать 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.info(filtered)
Почему бы не отфильтровать его оттуда, откуда он (бэкенд)? Я не уверен, есть ли влияние, если вы перебираете 13 тысяч объектов.