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

Sar*_*nyu 5 javascript lodash

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

["access","edit","delete"]
Run Code Online (Sandbox Code Playgroud)

对此

{access:true, edit:true, update:true}
Run Code Online (Sandbox Code Playgroud)

目前我循环分配对象中的每个值,但我想知道 lodash 是否已经为此提供了函数

Fra*_*erZ 5

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

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

console.log(
  input.reduce((obj, key) => { obj[key] = true; return obj; }, {})
);
Run Code Online (Sandbox Code Playgroud)

使用新的es6 扩展语法,您甚至可以使这变得更容易:

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

console.log(
  input.reduce((obj, key) => ({...obj, [key]: true}), {})
);
Run Code Online (Sandbox Code Playgroud)


Kou*_*jee 3

洛达什

您可以将其映射到一个条目数组,然后简单地fromPairs使用lodash

_.fromPairs(input.map(k=>[k, true]))
Run Code Online (Sandbox Code Playgroud)

_.fromPairs(input.map(k=>[k, true]))
Run Code Online (Sandbox Code Playgroud)
var input = ["access","edit","delete"];

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

console.log(res);
Run Code Online (Sandbox Code Playgroud)

ES6

您可以将输入映射到键(您的每个输入)值(true)对象对并分配它们。

Object.assign( ...input.map(k=>({[k]: true})))
Run Code Online (Sandbox Code Playgroud)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

如果您想要一个Map对象,您可以将输入映射到条目(如 lodash 示例中使用的)并简单地构建一个新的 Map ,例如

new Map(input.map(k=>[k, true]))
Run Code Online (Sandbox Code Playgroud)