Bra*_*yer 8 javascript transformation object underscore.js
我已经重新实现了我自己需要的版本,但我怀疑它已经包含在下划线中,因为它非常简单并且与许多其他函数密切相关.但我想不出应该叫什么.
基本上,我想要的是_.pluck的一个版本,它使用对象并返回一个对象而不是一个数组(及其相关的键).
所以,例如,如果我有一个像这样的对象:
elements: {
steam: {
temperature: 100,
color: 'orange',
state: 'gas'
},
water: {
temperature: 50,
color: 'blue',
state: 'liquid'
},
ice: {
temperature: 0,
color: 'white',
state: 'solid'
}
}
Run Code Online (Sandbox Code Playgroud)
我想打个电话 _.something(elements, 'temperature')
让它回归
{
steam: 100,
water: 50,
ice: 0
}
Run Code Online (Sandbox Code Playgroud)
而不是_.pluck(elements, 'temperature')返回
[100, 50, 0]
Run Code Online (Sandbox Code Playgroud)
这个转变叫做什么,它是否已经包含在下划线中?我自己用jQuery的每个循环编写了一个快速版本,因为我比jQuery更熟悉jQuery而不是下划线(如下所示),但如果可能的话,我更喜欢使用库中的一个.
$.objPluck = function(obj, key) {
var ret = {};
$.each(obj, function(k, value) {
ret[k] = value[key];
});
return ret;
}
Run Code Online (Sandbox Code Playgroud)
在下划线1.4.4中没有办法完全做到这一点,但如果你想留在下划线,你可以做到
_.object(_.keys(elements), _.pluck(elements, 'temperature'))
Run Code Online (Sandbox Code Playgroud)
从下划线1.8.3开始,这可以简洁地完成_.mapObject(elements, 'temperature');.
值得在这里添加一个使用ES6箭头功能等的解决方案:
Object.keys(elements).map(f=>elements[f].temperature)
Run Code Online (Sandbox Code Playgroud)
请注意,这不适用于较旧的javascript引擎,但在node.js 0.12中--harmony它可以很好地工作,或者与node.js 4.x及更高版本一起工作.我刚刚在Chrome 46中对此进行了测试,它运行正常.
它的优点是不需要任何额外的库,如下划线或lodash,但当然只适用于新的JS引擎.
| 归档时间: |
|
| 查看次数: |
27872 次 |
| 最近记录: |