从此转变的最精确方法是什么
["access","edit","delete"]
对此
{access:true, edit:true, update:true}
当前我循环分配对象中的每个值,但我想知道lodash是否已为此提供功能
答案 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]))