map
Функция underscore.js, если вызывается с объектом яваскрипта, возвращает массив значений , отображенных из значений объекта.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
есть ли способ заставить его сохранить ключи? т.е. мне нужна функция, которая возвращает
{one: 3, two: 6, three: 9}
javascript
underscore.js
lodash
xuanji
источник
источник
Ответы:
С подчеркиванием
Underscore предоставляет функцию
_.mapObject
для сопоставления значений и сохранения ключей.DEMO
С Lodash
Lodash предоставляет функцию
_.mapValues
для сопоставления значений и сохранения ключей.DEMO
источник
_.map()
возвращается[['one', 3], ['two', 6], ['three', 9]]
, который представляет собой массив массивов, и_.object()
превращает его обратно в объект.Мне удалось найти нужную функцию в lodash, служебной библиотеке, похожей на подчеркивание.
http://lodash.com/docs#mapValues
источник
источник
Я знаю, что это старое, но теперь у Underscore есть новая карта для объектов:
Конечно, вы можете построить гибкую карту как для массивов, так и для объектов.
источник
mapObject
;mapValues
вместо этого посмотрите на метод lodash .Как насчет этой версии на простом JS ( ES6 / ES2015 )?
jsbin
Если вы хотите отобразить объект рекурсивно (сопоставить вложенный объект obj), это можно сделать следующим образом:
jsbin
Начиная с ES7 / ES2016, вы можете использовать
Object.entries
вместоObject.keys
этого:источник
Я знаю, что это было давно, но все еще отсутствует наиболее очевидное решение через fold (также известное как сокращение в js), для полноты картины я оставлю его здесь:
источник
_.map возвращает массив, а не объект.
Если вам нужен объект, вам лучше использовать другую функцию, например
each
; если вы действительно хотите использовать карту, вы можете сделать что-то вроде этого:но это сбивает с толку, когда
map
можно ожидать, что в результате будет массив, а затем что-то с ним сделать.источник
map
используется для изменения ввода, создающего массив в качестве вывода, вы можете составить_.object
и_.map
как @GG. написал, но на данный момент это дело вкуса.Я думаю, вам нужна функция mapValues (для сопоставления функции со значениями объекта), которую достаточно легко реализовать самостоятельно:
источник
источник
Смешанное исправление ошибки карты подчеркивания : P
Простой обходной путь, который сохраняет правильную клавишу и возвращает как объект. Он по-прежнему используется так же, как и я, гость, вы можете использовать эту функцию для переопределения функции bugy _.map.
или просто, как я использовал его как миксин
источник
Вы можете использовать
_.mapValues(users, function(o) { return o.age; });
в Lodash и_.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
Underscore.Ознакомьтесь с перекрестной документацией здесь: http://jonathanpchen.com/underdash-api/#mapvalues-object-iteratee-identity
источник