создать объект противоположных строк - PullRequest
0 голосов
/ 27 марта 2020

У меня есть следующий объект в Javascript:

let directions = {
  "vertical": [
    "down",
    "up",
  ],
  "horizontal": [
    "left",
    "right",
  ]
}

и мне нужно найти способ создать из него другой объект, который выглядит следующим образом:

left oppositeDirections = {
  "left": "right",
  "right": "left",
  "down": "up",
  "up": "down"
}

Есть ли элегантный и эффективный способ go об этом в JS без использования сторонних библиотек?

1 Ответ

0 голосов
/ 27 марта 2020

При таком подходе вы можете получить требуемый результат.

let directions = {
  "vertical": [
    "down",
    "up",
  ],
  "horizontal": [
    "left",
    "right",
  ],
};

let res = {};
Object.values(directions).forEach(([a,b]) => {
  res = {...res, [a]: b, [b]: a};
});

console.log(res);
.as-console-wrapper {
  min-height: 100% !important;
}

Обновление

Вы можете получить тот же результат, используя reduce().

reduce() Метод выполняет функцию редуктора (которую вы предоставляете) для каждого элемента массива, в результате чего получается одно выходное значение.

let directions = {
  "vertical": [
    "down",
    "up",
  ],
  "horizontal": [
    "left",
    "right",
  ],
};

let res = Object.values(directions).reduce((acc, [a, b]) => {
	return {...acc, [a]: b, [b]: a}
}, {});

console.log(res);
.as-console-wrapper {
  min-height: 100% !important;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...