Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Создать объект с ключами из значений другого объекта (https://javascript.ru/forum/misc/70427-sozdat-obekt-s-klyuchami-iz-znachenijj-drugogo-obekta.html)

winzza 04.09.2017 14:02

Создать объект с ключами из значений другого объекта
 
Здравствуйте. Подскажите пожалуйста как мне создать объект с ключами из значений другого объекта?
Сейчас создаю так:
var typeButton = {
            'type1': 1,
            'type2': 2,
            'type3': 3
        },

        actionByTypeButton = {};
        actionByTypeButton[typeButton['type1']] = 'aaa';
        actionByTypeButton[typeButton['type2']] = 'bbb';
        actionByTypeButton[typeButton['type3']] = 'ccc';


Подскажите можно ли создать объект actionByTypeButton примерно так:

var typeButton = {
            'type1': 1,
            'type2': 2,
            'type3': 3
        },

        actionByTypeButton = [
            typeButton['type1'] = 'aaa',
            typeButton['type2'] = 'bbb',
            typeButton['type3'] = 'ccc'
        ];


Так работает, но переприсваевает typeButton. К примеру если вызвать:

console.log(typeButton['type1']); // 'aaa'

ksa 04.09.2017 14:36

Цитата:

Сообщение от winzza (Сообщение 463632)
Подскажите можно ли создать объект actionByTypeButton примерно так:
var typeButton = {
            'type1': 1,
            'type2': 2,
            'type3': 3
        },

        actionByTypeButton = [
            typeButton['type1'] = 'aaa',
            typeButton['type2'] = 'bbb',
            typeButton['type3'] = 'ccc'
        ];

Начнем с того, что тут actionByTypeButton вроде как массивом собрался стать... :) Не объектом...

И вот эта вот "конструкция"
Цитата:

Сообщение от winzza (Сообщение 463632)
actionByTypeButton = [
*!*
            typeButton['type1'] = 'aaa',
            typeButton['type2'] = 'bbb',
            typeButton['type3'] = 'ccc'
*/!*
        ];

Вообще капец... :blink:

ksa 04.09.2017 14:40

Цитата:

Сообщение от winzza
но переприсваевает typeButton

Как вариант...

var typeButton = {
	'type1': 1,
	'type2': 2,
	'type3': 3
};
var actionByTypeButton = [];
actionByTypeButton[typeButton['type1']] = 'aaa';
actionByTypeButton[typeButton['type2']] = 'bbb';
actionByTypeButton[typeButton['type3']] = 'ccc';
alert(actionByTypeButton);

Но массив получается без нулевого элемента... :(

Rasy 04.09.2017 15:24

Цитата:

Сообщение от winzza
Подскажите пожалуйста как мне создать объект с ключами из значений другого объекта?

Рассмотрим объектный литерал - его составляющие
{
  "ключ": "значение"
}

Если отвечать конкретно на вопрос. То получится такой объект -
var actionByTypeButton  = {
  '1': '',
  '2': '',
  '3': ''
}

Объект с ключами из значений другого объекта.
Но, я так понимаю нужно получить ключи объекта typeButton, а не их значения.
var copyKeys = function(p, v) {
  var keys = Object.keys(p);
  var o = {};

  keys.forEach(function(k, i) {
    o[k] = v[i];
  });

  return o;
};

var o = copyKeys(
           {'type1': 1,'type2': 2,'type3': 3},
           ['aaa', 'bbb', 'ccc']
        );
alert(JSON.stringify(o));

Функция создающая новый объект с ключами объекта прототипа и со значениями из аргумента в виде массива.


Часовой пояс GMT +3, время: 00:09.