Обработка JSON Object / Array на основе значения - PullRequest
0 голосов
/ 23 октября 2018

Попытка создать функцию, которая принимает свой первый аргумент в виде строки, а второй аргумент - в СПИСОК JSON:

[
    {
        "date": "09/09/18",
        "how_many": 11,
        "species": "XXXXX"
    },
    {
        "date": "04/11/17",
        "how_many": 41,
        "species": "TTTTTT"
    },
    {
        "date": "17/03/18",
        "how_many": 30,
        "species": "DDDDDDDD"
    },
    {
        "date": "17/08/18",
        "how_many": 31,
        "species": "XXXXX"
    },
]

Если строка присутствует в подсчете «разновидностей» каждой записи JSON, она будетвернуть количество вхождений.

По сути, функция, которая возвращает количество вхождений в массив (или список) объектов, чей ключ "видов" соответствует первому аргументу функции?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы можете использовать Array.reduce

Из документов,

Метод Reduce () выполняет функцию редуктора (которую вы предоставляете) для каждого членамассива, приводящего к единственному выходному значению.

Возвращаемое значение вашей функции редуктора присваивается аккумулятору, значение которого запоминается на каждой итерации в массиве и в конечном итоге становится окончательным, единственным результирующим значением.

ОБЪЯСНЕНИЕ

Как вы теперь знаете, функция Reduce сведет массив в одно значение, которое здесь будет суммой всех соответствующих видов ,По умолчанию сумма равна 0.При повторении мы проверяем виды объектов по переданному значению вида в функции.Если значение совпадает, добавьте к сумме его значение how_many .

ES6

let list = [{"date":"09/09/18","how_many":11,"species":"XXXXX"},{"date":"04/11/17","how_many":41,"species":"TTTTTT"},{"date":"17/03/18","how_many":30,"species":"DDDDDDDD"},{"date":"17/08/18","how_many":31,"species":"XXXXX"}];

function findOccurences(str, arr) {
  return arr.reduce((a,c) => a + (c.species === str ? c.how_many : 0), 0);
}

console.log(findOccurences("XXXXX", list));

ES5

let list = [{"date":"09/09/18","how_many":11,"species":"XXXXX"},{"date":"04/11/17","how_many":41,"species":"TTTTTT"},{"date":"17/03/18","how_many":30,"species":"DDDDDDDD"},{"date":"17/08/18","how_many":31,"species":"XXXXX"}];

function findOccurences(str, arr) {
  // Here a - accumulator and c - current value
  return arr.reduce(function(a, c){
    // If the species of object is same as passed value (str), add it to total sum
    if(c.species === str) {
      a += c.how_many;
    }
    return a;
  }, 0);
}

console.log(findOccurences("XXXXX", list));
0 голосов
/ 23 октября 2018

Попробуйте это:

function getCount(str, jsonArr) {
   var match = jsonArr.filter(obj=> obj.species === str);
   return match.length;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...