Javascript получить счет DISTINCT, например sql, из данных

        data = [
        {
            "index": 0,
            "id": 47,
            "sepallengthcm": 5.1,
            "sepalwidthcm": 3.8,
            "unnamed:_3": 1.6,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 1,
            "id": 48,
            "sepallengthcm": 4.6,
            "sepalwidthcm": 3.2,
            "unnamed:_3": 1.4,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 2,
            "id": 49,
            "sepallengthcm": 5.3,
            "sepalwidthcm": 3.7,
            "unnamed:_3": 1.5,
            "petalwidthcm": 0.2,
            "species": "jennifer"
        },
        {
            "index": 3,
            "id": 50,
            "sepallengthcm": 5.0,
            "sepalwidthcm": 3.3,
            "unnamed:_3": 1.4,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 4,
            "id": 97,
            "sepallengthcm": 12.0,
            "sepalwidthcm": 2.9,
            "unnamed:_3": 4.2,
            "petalwidthcm": 1.3,
            "species": "jennifer"
        },
        {
            "index": 5,
            "id": 98,
            "sepallengthcm": 6.2,
            "sepalwidthcm": 2.9,
            "unnamed:_3": 4.3,
            "petalwidthcm": 1.3,
            "species": "jennifer"
        },
        {
            "index": 6,
            "id": 99,
            "sepallengthcm": 5.1,
            "sepalwidthcm": 2.5,
            "unnamed:_3": 3.0,
            "petalwidthcm": 1.1,
            "species": "kajol"
        },
        {
            "index": 7,
            "id": 100,
            "sepallengthcm": 11.0,
            "sepalwidthcm": 2.8,
            "unnamed:_3": 7.0,
            "petalwidthcm": 1.3,
            "species": "floaw"
        },
        {
            "index": 8,
            "id": 101,
            "sepallengthcm": 6.3,
            "sepalwidthcm": 3.3,
            "unnamed:_3": 6.0,
            "petalwidthcm": 2.5,
            "species": "Iris-flower"
        },
        {
            "index": 9,
            "id": 102,
            "sepallengthcm": 5.8,
            "sepalwidthcm": 2.7,
            "unnamed:_3": 5.1,
            "petalwidthcm": 1.9,
            "species": "Iris-flower"
        }
        ]

Вот мои входные данные. Я пытаюсь добиться подсчета этих данных, используя специальное поле

результат = distictCount ("виды")

    result = [
            {
            "species": "Iris-flower",
            "sepallengthcm": 2
            },
            {
            "species": "floaw",
            "sepallengthcm": 1
            },
            {
            "species": "jennifer",
            "sepallengthcm": 3
            },
            {
            "species": "kajol",
            "sepallengthcm": 1
            },
            {
            "species": "setosa",
            "sepallengthcm": 3
            }
        ]


SELECT species, COUNT(DISTINCT sepallengthcm) as sepallengthcm FROM soubhagyairis GROUP BY species;

Мой sql-запрос работает. Но я хочу добиться этого с помощью javascript. Взгляни, пожалуйста.

Как мы можем сделать это

Спасибо

Мой sql-запрос работает. Но я хочу добиться этого с помощью javascript. Взгляни, пожалуйста.

Как мы можем сделать это

Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
64
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Для этого я использовал метод countBy underscore.js.

data = [
        {
            "index": 0,
            "id": 47,
            "sepallengthcm": 5.1,
            "sepalwidthcm": 3.8,
            "unnamed:_3": 1.6,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 1,
            "id": 48,
            "sepallengthcm": 4.6,
            "sepalwidthcm": 3.2,
            "unnamed:_3": 1.4,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 2,
            "id": 49,
            "sepallengthcm": 5.3,
            "sepalwidthcm": 3.7,
            "unnamed:_3": 1.5,
            "petalwidthcm": 0.2,
            "species": "jennifer"
        },
        {
            "index": 3,
            "id": 50,
            "sepallengthcm": 5.0,
            "sepalwidthcm": 3.3,
            "unnamed:_3": 1.4,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 4,
            "id": 97,
            "sepallengthcm": 12.0,
            "sepalwidthcm": 2.9,
            "unnamed:_3": 4.2,
            "petalwidthcm": 1.3,
            "species": "jennifer"
        },
        {
            "index": 5,
            "id": 98,
            "sepallengthcm": 6.2,
            "sepalwidthcm": 2.9,
            "unnamed:_3": 4.3,
            "petalwidthcm": 1.3,
            "species": "jennifer"
        },
        {
            "index": 6,
            "id": 99,
            "sepallengthcm": 5.1,
            "sepalwidthcm": 2.5,
            "unnamed:_3": 3.0,
            "petalwidthcm": 1.1,
            "species": "kajol"
        },
        {
            "index": 7,
            "id": 100,
            "sepallengthcm": 11.0,
            "sepalwidthcm": 2.8,
            "unnamed:_3": 7.0,
            "petalwidthcm": 1.3,
            "species": "floaw"
        },
        {
            "index": 8,
            "id": 101,
            "sepallengthcm": 6.3,
            "sepalwidthcm": 3.3,
            "unnamed:_3": 6.0,
            "petalwidthcm": 2.5,
            "species": "Iris-flower"
        },
        {
            "index": 9,
            "id": 102,
            "sepallengthcm": 5.8,
            "sepalwidthcm": 2.7,
            "unnamed:_3": 5.1,
            "petalwidthcm": 1.9,
            "species": "Iris-flower"
        }
        ];

let a = _.countBy(data, function(item) {
  return item.species;
});

tmp = [];
for (const key in a) {
  val = {}
  val.species = key;
  val.sepallengthcm = a[key]
  
  tmp.push(val);
}

console.info(tmp);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.12.0/underscore-min.js" integrity = "sha512-BDXGXSvYeLxaldQeYJZVWXJmkisgMlECofWFXKpWwXnfcp/R708nrs/BtNLH5cb/5TE7aeYRTDBRXu6kRL4VeQ= = " crossorigin = "anonymous"></script>

Пример https://jsfiddle.net/8Lph7503/

Источник: https://underscorejs.org/#countBy

Вы можете сделать это, используя цикл for:

Фрагмент:

var data = [
        {
            "index": 0,
            "id": 47,
            "sepallengthcm": 5.1,
            "sepalwidthcm": 3.8,
            "unnamed:_3": 1.6,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 1,
            "id": 48,
            "sepallengthcm": 4.6,
            "sepalwidthcm": 3.2,
            "unnamed:_3": 1.4,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 2,
            "id": 49,
            "sepallengthcm": 5.3,
            "sepalwidthcm": 3.7,
            "unnamed:_3": 1.5,
            "petalwidthcm": 0.2,
            "species": "jennifer"
        },
        {
            "index": 3,
            "id": 50,
            "sepallengthcm": 5.0,
            "sepalwidthcm": 3.3,
            "unnamed:_3": 1.4,
            "petalwidthcm": 0.2,
            "species": "setosa"
        },
        {
            "index": 4,
            "id": 97,
            "sepallengthcm": 12.0,
            "sepalwidthcm": 2.9,
            "unnamed:_3": 4.2,
            "petalwidthcm": 1.3,
            "species": "jennifer"
        },
        {
            "index": 5,
            "id": 98,
            "sepallengthcm": 6.2,
            "sepalwidthcm": 2.9,
            "unnamed:_3": 4.3,
            "petalwidthcm": 1.3,
            "species": "jennifer"
        },
        {
            "index": 6,
            "id": 99,
            "sepallengthcm": 5.1,
            "sepalwidthcm": 2.5,
            "unnamed:_3": 3.0,
            "petalwidthcm": 1.1,
            "species": "kajol"
        },
        {
            "index": 7,
            "id": 100,
            "sepallengthcm": 11.0,
            "sepalwidthcm": 2.8,
            "unnamed:_3": 7.0,
            "petalwidthcm": 1.3,
            "species": "floaw"
        },
        {
            "index": 8,
            "id": 101,
            "sepallengthcm": 6.3,
            "sepalwidthcm": 3.3,
            "unnamed:_3": 6.0,
            "petalwidthcm": 2.5,
            "species": "Iris-flower"
        },
        {
            "index": 9,
            "id": 102,
            "sepallengthcm": 5.8,
            "sepalwidthcm": 2.7,
            "unnamed:_3": 5.1,
            "petalwidthcm": 1.9,
            "species": "Iris-flower"
        }
        ];
        
var result = [];
var intermediate = [];

for (var i = 0; i < data.length; i++) {
    intermediate[i] = data[i].species;
}
intermediate.sort();
var n = 0;
for (var i = 0; i <= intermediate.length; i++) {
    
    if (intermediate[i] !== intermediate[i - 1]) {
        if (intermediate[i - 1] !== undefined) {
            result.push({"flower": intermediate[i-1], "n": n});
        }
        n = 1;
    } else {
        n++;
    }
}
console.info(result);

Код:

var result = [];
var intermediate = [];

for (var i = 0; i < data.length; i++) {
    intermediate[i] = data[i].species;
}
intermediate.sort();
var n = 0;
for (var i = 0; i <= intermediate.length; i++) {
    
    if (intermediate[i] !== intermediate[i - 1]) {
        if (intermediate[i - 1] !== undefined) {
            result.push({"flower": intermediate[i-1], "n": n});
        }
        n = 1;
    } else {
        n++;
    }
}
console.info(result);

Он дает мне список

soubhagya pradhan 21.12.2020 12:20
Ответ принят как подходящий

Вы можете попробовать это:

const distinctCount = (data, group, key) => {
    return Array.from(new Set(data.map(d => d[group])))
      .map(g => {return {
        [group]: g,
        [key]: data.filter(d => d[group] == g).length
  }});
}

Использование new Set(data.map(d => d[group])) создает набор, который выполняет за вас тяжелую работу SQL DISTINCT, а использование Array.from(etc) преобразует в обычный массив Javascript.

Затем .map(...) создает новый объект для каждого вида DISTINCT и находит количество, используя data.filter(d => d[group] == g).length

data = [
  {
    "index": 0,
    "id": 47,
    "sepallengthcm": 5.1,
    "sepalwidthcm": 3.8,
    "unnamed:_3": 1.6,
    "petalwidthcm": 0.2,
    "species": "setosa"
  },
  {
    "index": 1,
    "id": 48,
    "sepallengthcm": 4.6,
    "sepalwidthcm": 3.2,
    "unnamed:_3": 1.4,
    "petalwidthcm": 0.2,
    "species": "setosa"
  },
  {
    "index": 2,
    "id": 49,
    "sepallengthcm": 5.3,
    "sepalwidthcm": 3.7,
    "unnamed:_3": 1.5,
    "petalwidthcm": 0.2,
    "species": "jennifer"
  },
  {
    "index": 3,
    "id": 50,
    "sepallengthcm": 5.0,
    "sepalwidthcm": 3.3,
    "unnamed:_3": 1.4,
    "petalwidthcm": 0.2,
    "species": "setosa"
  },
  {
    "index": 4,
    "id": 97,
    "sepallengthcm": 12.0,
    "sepalwidthcm": 2.9,
    "unnamed:_3": 4.2,
    "petalwidthcm": 1.3,
    "species": "jennifer"
  },
  {
    "index": 5,
    "id": 98,
    "sepallengthcm": 6.2,
    "sepalwidthcm": 2.9,
    "unnamed:_3": 4.3,
    "petalwidthcm": 1.3,
    "species": "jennifer"
  },
  {
    "index": 6,
    "id": 99,
    "sepallengthcm": 5.1,
    "sepalwidthcm": 2.5,
    "unnamed:_3": 3.0,
    "petalwidthcm": 1.1,
    "species": "kajol"
  },
  {
    "index": 7,
    "id": 100,
    "sepallengthcm": 11.0,
    "sepalwidthcm": 2.8,
    "unnamed:_3": 7.0,
    "petalwidthcm": 1.3,
    "species": "floaw"
  },
  {
    "index": 8,
    "id": 101,
    "sepallengthcm": 6.3,
    "sepalwidthcm": 3.3,
    "unnamed:_3": 6.0,
    "petalwidthcm": 2.5,
    "species": "Iris-flower"
  },
  {
    "index": 9,
    "id": 102,
    "sepallengthcm": 5.8,
    "sepalwidthcm": 2.7,
    "unnamed:_3": 5.1,
    "petalwidthcm": 1.9,
    "species": "Iris-flower"
  }
];

const distinctCount = (data, group, key) => {
    return Array.from(new Set(data.map(d => d[group])))
        .map(g => {return {
        [group]: g,
        [key]: data.filter(d => d[group] == g).length
  }});
}

console.info(distinctCount(data, "species", "sepallengthcm"));

Другие вопросы по теме