У меня очень большой объект JSON, структурированный следующим образом:
{A : 1, B : 2, C : 3, D : 4}
Мне нужна функция, которая может обменивать значения ключами в моем объекте, и я не знаю, как это сделать. Мне нужен такой вывод:
{1 : A, 2 : B, 3 : C, 4 : D}
Есть ли способ, которым я могу это сделать, если бы вручную создал новый объект, в котором все поменялось местами?
Спасибо
function swap(obj) {return new Map(Object.entries(x).map([k, v] => [v, k]))}
Ответы:
Пример здесь FIDDLE , не забудьте включить консоль, чтобы увидеть результаты.
Версии ES6 :
Или используя Array.reduce () и Object.keys ()
Или используя Array.reduce () и Object.entries ()
источник
вы можете использовать функцию lodash _.invert, она также может использовать multivlaue
источник
Использование ES6:
источник
Получите ключи объекта, а затем используйте функцию уменьшения массива, чтобы пройти по каждому ключу и установить значение как ключ, а ключ как значение.
источник
В ES6 / ES2015 вы можете комбинировать использование Object.keys и уменьшить с новой функцией Object.assign, функцией стрелки и вычисляемым именем свойства для довольно простого решения с одним оператором.
Если вы транспилируете с помощью оператора распространения объекта (этап 3 на момент написания этого текста), это еще больше упростит ситуацию.
Наконец, если у вас есть Object.entries (этап 4 на момент написания), вы можете немного очистить логику (IMO).
источник
Теперь, когда у нас есть Object.fromEntries:
или
источник
В качестве дополнения к ответам @joslarson и @jPO:
без необходимости ES6 вы можете использовать и оператор запятой :
Object.keys
Array.reduce
Некоторым это может показаться уродливым, но это «отчасти» быстрее, так как
reduce
не распространяется все свойства циклаobj
на каждый цикл.источник
forEach
, чем методыmap
илиreduce
. Я сделал этот ответ, чтобы иметь однострочное решение без необходимости использования es6 и при этом оставаться актуальным с точки зрения скорости / эффективности.Пытаться
Показать фрагмент кода
источник
Самый короткий, который я придумал, используя ES6 ..
источник
Используя Ramda :
источник
Я считаю, что лучше выполнять эту задачу с помощью модуля npm, например
invert-kv
.invert-kv : инвертировать ключ / значение объекта. Пример: {foo: 'bar'} → {bar: 'foo'}
https://www.npmjs.com/package/invert-kv
источник
С чистой Ramda в чистом и бессмысленном стиле:
Или, с немного более запутанной версией ES6, все еще чисто функциональной:
источник
Вот чисто функциональная реализация переворачивания
keys
иvalues
в ES6:Машинопись
JavaScript
источник
источник
object
взялось?map
должно делать, вы используете это здесь какforEach
Это может сделать ваш объект
{A : 1, B : 2, C : 3, D : 4}
похожим на массив, поэтому вы можете иметьисточник
Вот вариант, который заменит ключи значениями, но не потеряет дубликаты, если ваш объект: {a: 1, b: 2, c: 2}, он всегда будет возвращать массив на выходе:
источник