У меня есть эти образцы данных, возвращенные из API.
Я использую Lodash _.groupBy
для преобразования данных в объект, который я могу использовать лучше. Возвращенные необработанные данные:
[
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
Я хочу, чтобы _.groupBy
функция возвращала объект, который выглядит так:
[
{
color: "blue",
users: [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
}
]
},
{
color: "green",
users: [
{
"name": "eddie",
"color": "green",
"age": "77"
}
]
}
]
В настоящее время я использую
_.groupBy(a, function(b) { return b.color})
который возвращает это.
{blue: [{..}], green: [{...}]}
группировки правильные, но я бы очень хотел добавить нужные мне ключи ( color
, users
). это возможно с помощью _.groupBy
? или какая-то другая LoDash
утилита?
javascript
sorting
underscore.js
grouping
lodash
user1767105
источник
источник
_.object
это псевдоним_.zipObject
)._.zip
и_.pair
так много.pairs()
метода больше не существует. Обновленная версия этого примера lodash 4.0:.chain(data).groupBy('color') .toPairs().map(function (pair) { return _.zipObject(['Name', 'Suppliers'], air); }).value();
_.chain
сейчас считается плохой практикой.Разве это не так просто?
источник
по-другому
источник
Ответ с наибольшим количеством
_.chain
голосов использует функцию Lodash, которая сейчас считается плохой практикой: «Почему использование_.chain
является ошибкой».Вот несколько подходов к проблеме с точки зрения функционального программирования :
Где
input
находится массив, который вы хотите преобразовать.источник
flow()
вместоchain()
here, но проверка типов машинописного текста просто сходила с ума от составных функций. Я надеюсь, что у нас есть тот же уровень поддержки, что и в RxJSpipe()
, например, в lodash.map((users, color) => ({color, users}))
вместо этого очень крутоmap((value, key) => ({ color: key, users: value }))
Спасибо @thefourtheye , ваш код очень помог. Я создал универсальную функцию из вашего решения, используя Lodash версии 4.5.0.
Чтобы использовать это:
Вот обновленный скрипач;
https://jsfiddle.net/sc2L9dby/
источник
Вот обновленная версия с использованием lodash 4 и ES6
источник
Я бы предложил другой подход, используя мою собственную библиотеку, вы могли бы сделать это в несколько строк:
Это было бы немного сложно с lodash или Underscore, потому что аргументы находятся в обратном порядке, поэтому вам придется использовать
_.partial
много.источник
Пример groupBy и суммы столбца с использованием Lodash 4.17.4
источник
В 2017 так и сделаю
источник