#javascript #node.js #arrays #filter
#javascript #node.js #массивы #Фильтр
Вопрос:
У меня есть следующий массив объектов в Node.js сценарий:
[
{
start: '10-05-2018',
assigned_agent: '1257434'
},
{
start: '10-05-2018',
assigned_agent: '1257434'
},
{
start: '10-05-2018',
assigned_agent: '1257434'
},
{
start: '10-06-2018',
assigned_agent: '1257434'
},
{
start: '10-05-2018',
assigned_agent: '1277852'
},
{
start: '10-05-2018',
assigned_agent: '1277852'
}
]
Что мне нужно, так это сгруппировать это по ключам start и assigned_agent . Я пробовал filter
примеры функций, но безуспешно. Нет, в массиве есть другие пары ключ / значение, но для большей ясности их опускаем. Кроме того, хотя это Node.js сценарий У меня есть Lodash, если это поможет.
Спасибо.
Комментарии:
1. Вам нужен
reduce
метод, а не фильтр, если вы хотите их сгруппировать.2. Спасибо. Тогда это должно быть простое решение.
3. Да, тот, с помощью которого вы должны быть в состоянии сделать попытку самостоятельно.
4. var arr_new = Object.values(obj_agents_routes.reduce((acc, cur) => Object.assign(acc, { [cur.assigned_agent, cur.start]: cur }), {}));
5. имеет неожиданную ошибку токена. Мне нужно выяснить «уменьшить» для нескольких значений.
Ответ №1:
Если вы согласны с использованием Lodash, попробуйте groupBy
const data = [
{ start: "10-05-2018", assigned_agent: "1257434" },
{ start: "10-05-2018", assigned_agent: "1257434" },
{ start: "10-05-2018", assigned_agent: "1257434" },
{ start: "10-06-2018", assigned_agent: "1257434" },
{ start: "10-05-2018", assigned_agent: "1277852" },
{ start: "10-05-2018", assigned_agent: "1277852" },
]
const group_by_both = _.chain(data)
.groupBy((el) => `${el.start} ${el.assigned_agent}`)
.values()
.value()
console.log(group_by_both)
.as-console-wrapper { max-height: 100% !important; }
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>
Комментарии:
1. Я согласен с Lodash, но мне нужно группировать по обоим значениям для каждой пары массивов. Позвольте мне попробовать ваше решение. Спасибо!
2. Привет, ваш ответ вроде как работает, но без необходимости добавляет: { ’10-05-2018 1257434′: [ {
3. @IrfanClemson вы могли бы избавиться от него, извлекая значение с помощью _.values()
4. Привет, пожалуйста, обновите свой ответ, и я приму его. Я думаю, что я почти на месте. Спасибо!
5. @IrfanClemson только что обновлен, вы могли бы взглянуть на него
Ответ №2:
var data = [{
start: '10-05-2018',
assigned_agent: '1257434'
},
{
start: '10-05-2018',
assigned_agent: '1257434'
},
{
start: '10-05-2018',
assigned_agent: '1257434'
},
{
start: '10-06-2018',
assigned_agent: '1257434'
},
{
start: '10-05-2018',
assigned_agent: '1277852'
},
{
start: '10-05-2018',
assigned_agent: '1277852'
}
];
var grouped = data.reduce((accumulator, element) => {
// group by start and agent, so combine values for unique key
var key = element.start element.assigned_agent;
// if there is not already a grouping, make an empty array
accumulator[key] = accumulator[key] || [];
// add the element to the desired group
accumulator[key].push(element);
// return the accumulator for the next iteration
return accumulator;
}, {});
console.log(grouped);
Комментарии:
1. Привет, спасибо за вашу помощь! Я уже начал с ответа @hgb123. Уверен, что ваши тоже помогли бы. Еще раз спасибо!