#javascript #arrays #d3.js #filter
#javascript #массивы #d3.js #Фильтр
Вопрос:
Итак, я загрузил объект JSON из D3 и теперь хочу отфильтровать некоторые столбцы из массива. Моя единственная проблема заключается в том, что выполнение:
Object.attribute;
не возвращает то, что я хочу. Структура моего объекта JSON выглядит следующим образом. Он содержит 1000 объектов, и каждый массив содержит атрибуты внутри него. Я получаю свои данные из https://data.raleighnc.gov/resource/xce4-kemu.json , для справки.
Если я сделаю
Object[0].attribute;
Он возвращает фактическое значение объекта, например, «12». Где, поскольку я хочу, чтобы он возвращал все значения, в которых присутствует этот ключ
В URL вы можете увидеть пример JSON. Я хочу, например, вернуть JSON, в котором присутствуют только атрибуты issueddate_mth, statelicnum и constcompletedofficial .
Фрагмент того, что я пробовал, это:
var raleigh_data = "https://data.raleighnc.gov/resource/xce4-kemu.json";
d3.json(raleigh_data, function(error, data) {
var filtered_data = data.filter(function(d,i,e) {
return d.issueddate_mth;
});
}
Комментарии:
1. это массив из 1000 объектов, а не из 1000 массивов
2. что вы хотите отфильтровать из этих данных?
3. используйте что-то вроде
var filteredArray = xxx.filter(callbackFunction)
для фильтрации массива (массивом в данном случае является переменная с именем xxx … вы не хотите использовать вызываемую переменнуюObject
)… Функция обратного вызова — это функция, которая принимает 3 аргумента, элемент, индекс и весь массив … выполняйте свою логику и возвращайте true или false, чтобы включить / исключить элемент в возвращаемый новый массив4. Итак, я правильно понимаю — вы хотите выполнить итерацию по каждому объекту в массиве и вернуть массив всех значений для данного свойства, присутствующего в каждом объекте?
5. @anied Я обновил свой ответ, чтобы, надеюсь, сделать его более понятным
Ответ №1:
var data = [your array of 1000 objects]
var filteredData = [];
data.forEach(function(item) {
if (item.issueddate_mth amp;amp; item.statelicnum amp;amp; item.constcompletedofficial) {
filteredData.push(item);
}
});
В результате вы получите массив, содержащий только элементы из вашего исходного массива с указанными свойствами.
Кроме того, я не уверен на 100%, нужны ли вам только эти три свойства. Если это так, вы можете легко просто нажать { issueddate_mth: item.issueddate_mth, statelicnum: item.statelicnum, constcompletedofficial: item.constcompletedofficial }
вместо item
обратного forEach
вызова
Комментарии:
1. Есть ли способ сделать обратное. Это означает, что я удаляю свойства, которые мне не нужны в объекте JSON?
2. Хорошо, я попробовал вторую часть, как вы указали, и она сработала как шарм. Спасибо!!