Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.07.2017, 05:31
Новичок на форуме
Отправить личное сообщение для warorc Посмотреть профиль Найти все сообщения от warorc
 
Регистрация: 17.07.2017
Сообщений: 2

lodash.mapValues
Добрый день!

Не могу самостоятельно разобраться, почему так странно работает lodash.

1. Вариант:

var _=require('lodash');

var users = {
  'fred':    { 'user': 'fred',    'age': 40 },
  'pebbles': { 'user': 'pebbles', 'age': 1 }
};

var map1 = _.mapValues(users, function() {

  return users; // возвращает ДВА!!!! раза:

// { fred: 
//   { fred: { user: 'fred', age: 40 },
//     pebbles: { user: 'pebbles', age: 1 } },
//  pebbles: 
//   { fred: { user: 'fred', age: 40 },
//     pebbles: { user: 'pebbles', age: 1 } } }

});

console.log(map1);


Но если передаем в функцию значение, то возвращает один раз:

var _=require('lodash');

var users = {
  'fred':    { 'user': 'fred',    'age': 40 },
  'pebbles': { 'user': 'pebbles', 'age': 1 }
};

var map1 = _.mapValues(users, function(o) {

  return o; // возвращает один раз

});

console.log(map1);]



Почему так, ведь и в одном и в другом случае я прошу вернуть всего-лишь объект user???

Последний раз редактировалось warorc, 19.07.2017 в 03:04.
Ответить с цитированием
  #2 (permalink)  
Старый 17.07.2017, 19:16
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

warorc,
Почитай что делает mapValues, не понятно что тебе надо, нарисуй нужный результат.
Ответить с цитированием
  #3 (permalink)  
Старый 19.07.2017, 02:50
Новичок на форуме
Отправить личное сообщение для warorc Посмотреть профиль Найти все сообщения от warorc
 
Регистрация: 17.07.2017
Сообщений: 2

Rise, привет

Я пытаюсь понять как работает mapValue из описания мне не очень понятно, я решил позадавать разные входные параметры, чтобы дебагом понять, что происходит.

Так вот, когда я в _.mapValues параметром передаю в функцию пусто, то у мена возвращается два раза переданный объект users
var map1 = _.mapValues(users, function() {

  return users; 
}


Результат:
{ fred:
{ fred: { user: 'fred', age: 40 },
pebbles: { user: 'pebbles', age: 1 } },
pebbles:
{ fred: { user: 'fred', age: 40 },
pebbles: { user: 'pebbles', age: 1 } }
}


Когда же я на вход параметра функции передаю некий (o), то возвращается один раз объект. Мне не понятно почему так происходит если возвратить и в первом и во втором случае я его прошу только мой объект, только в первом случае напрямую как users, а во втором через какое-то "o" которое вообще не понято как подхватывается функцией


var map1 = _.mapValues(users, function(o) {
 
  return o; // возвращает один раз

});


Результат:
{ fred: { user: 'fred', age: 40 },
pebbles: { user: 'pebbles', age: 1 } }

Последний раз редактировалось warorc, 19.07.2017 в 03:04.
Ответить с цитированием
  #4 (permalink)  
Старый 19.07.2017, 04:16
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

warorc,
mapValue создает новый объект с ключами как в исходном объекте и с значениями равными результатам вызова функции. Функция вызывается с тремя аргументами: текущее обрабатываемое значение, текущий обрабатываемый ключ, объект по ключам которого осуществляется проход.
var users = {
    'fred': { 'user': 'fred', 'age': 40 },
    'pebbles': { 'user': 'pebbles', 'age': 1 }
};
var newUsers = _.mapValues(users, function(value, key, object) {
    console.log('Arguments', value, key, object);
});
console.log('newUsers', newUsers);

Последний раз редактировалось Rise, 19.07.2017 в 04:31.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск