Фильтровать значения из массивов в Json (JavaScript)

#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. Хорошо, я попробовал вторую часть, как вы указали, и она сработала как шарм. Спасибо!!