Преобразование из массива строк в hashmap в Lodash - PullRequest
0 голосов
/ 12 октября 2018

Какой самый точный способ преобразования из этого

["access","edit","delete"]

в это

{access:true, edit:true, update:true}

В настоящее время я в цикле, чтобы назначить каждое значение в объекте, но мне интересно, если lodash уже предоставляет функциюза это

Ответы [ 4 ]

0 голосов
/ 12 октября 2018

LODASH

Вы можете сопоставить его с массивом записей, а затем просто использовать fromPairs из lodash

_.fromPairs(input.map(k=>[k, true]))

var input = ["access","edit","delete"];

var res = _.fromPairs(input.map(k=>[k,true]));

console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

ES6

Вы можете сопоставить ваш вход с парой значений ключа (каждого входного значения) (true)объекты и назначить их.

Object.assign( ...input.map(k=>({[k]: true})))

var input = ["access","edit","delete"]

var res = Object.assign( ...input.map(k=>({[k]: true})));

console.log(res);

В случае, если вам нужен объект Map, вы можете сопоставить свои данные с записями (как в примере с lodash) и просто создать новую Карту, такую ​​как

new Map(input.map(k=>[k, true]))
0 голосов
/ 12 октября 2018

Используйте Reduce () .Все это можно сделать с помощью простой однострочной программы, которая не требует каких-либо библиотек:

const input = ["access","edit","delete"];

console.log(
  input.reduce((obj, key) => { obj[key] = true; return obj; }, {})
);

С новым синтаксисом es6 вы даже можете сделать это проще:

const input = ["access","edit","delete"];

console.log(
  input.reduce((obj, key) => ({...obj, [key]: true}), {})
);
0 голосов
/ 12 октября 2018

Если вы абсолютно хотите использовать lodash (в отличие от вышеупомянутого ванильного javascript redu () ответов), вы можете использовать _.mapValues() для выполнения этого:

const input = ["access","edit","delete"];

const output = _.mapValues(_.keyBy(input), () => true)

console.log(output);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js" integrity="sha256-7/yoZS3548fXSRXqc/xYzjsmuW3sFKzuvOCHd06Pmps=" crossorigin="anonymous"></script>
0 голосов
/ 12 октября 2018

Нет необходимости импортировать библиотеку для чего-то такого простого, просто reduce массив ключей в объект, проиндексированный этими ключами:

const input = ["access","edit","delete"];
const output = input.reduce((a, key) => Object.assign(a, {[key]: true}), {});
console.log(output);

Или, присваивая свойству аккумулятора вместо использования Object.assign:

const input = ["access","edit","delete"];
const output = input.reduce((a, key) => {
  a[key] = true;
  return a;
}, {});
console.log(output);
...