Lodash是否有与_.keys相反的函数?

3
LoDash有没有一个方法可以做与_.keys相反的事情,即接受一个数组并为每个键分配值和一个任意字符串作为每个值?就像这样:
var list = ['a', 'b', 'c']

var object = _.✨unicornize✨ (list, '-')

console.log (object)  // expect {'a': '-', 'b': '-', 'c': '-'}

LoDash有内置功能可以做到这一点吗?如果没有,有什么优雅的方法可以实现这个功能呢?

5
并不是一个单一的函数:_.object(list.map(k => [k, '-']))。在ES2015中可以使用以下方式:list.reduce((acc, k) => ({...acc, [k]: '-'}), {})。该方法会将列表中每个元素映射为一个键值对,其中键是列表元素本身,值是字符串“-”。 - undefined
@zerkms哇,这个代码真的很短。可惜ES6/BabelJS不是一个选项,而且时间复杂度会非常糟糕。 - undefined
@SuperScript: “那个的时间复杂度肯定不会很好” - 哎,为什么这样说呢? - undefined
@SuperScript:_.object(_.map(list, function(k){ return [, '-'];}))@超级脚本:_.object(_.map(list, function(k){ return [, '-'];})) - undefined
@zerkms:对象展开不是ES2015的语法。最好使用Object.assign - undefined
@Bergi 是的,我知道 :-) 只是希望没人会注意到 :-D - undefined
2个回答

2
这似乎很像一个代码高尔夫挑战 :)
解决方案 #1:
_.mapValues(_.invert(list), _.constant('-'))

解决方案 #2:
_.zipObject(list, _.fill(new Array(list.length), '-'))

解决方案 #3:
_.zipObject(_.map(list, function (v, k) { return [v, '-'] }))
// or, if you would use arrow functions:
_.zipObject(_.map(list, (v, k) => [v, '-']))

2
您可以做的事情
_.mapValues(_.keyBy(list), _.constant('-'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接