在Lodash中从字符串数组转换为哈希图

时间:2018-10-12 04:55:08

标签: javascript lodash

从此转变的最精确方法是什么

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

对此

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

当前我循环分配对象中的每个值,但我想知道lodash是否已为此提供功能

4 个答案:

答案 0 :(得分:3)

使用reduce()。所有这些都可以通过简单的单行代码完成,不需要任何库:

::item

借助新的es6 spread syntax,您甚至可以简化此操作:

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

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

答案 1 :(得分:2)

无需为简单的操作导入库,只需将键数组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);

答案 2 :(得分:1)

如果您绝对要使用lodash(与上述普通javascript reduce()答案相反),则可以使用_.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>

答案 3 :(得分:1)

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示例中所使用的),并且只需构造一个新的Map即可,例如

new Map(input.map(k=>[k, true]))