函数式编程-从Javascript中的对象列表中提取对象属性
functional programming - Extract object attribute from list of objects in Javascript
我从API接收到以下对象:
{
'2012-12-12': [
{ 'id': 1234,
'type': 'A' },
{ 'id': 1235,
'type': 'A' },
{ 'id': 1236,
'type': 'B' },
],
'2012-12-13': [
{ 'id': 1237,
'type': 'A' },
{ 'id': 1238,
'type': 'C' },
{ 'id': 1239,
'type': 'B' },
]
}
然后我想要另一个名为types
的类型为Array
的变量,它将保存每个对象的type
属性的每个可能值。在这种情况下,它将是:
types = ['A', 'B', 'C']
我正在尝试以一种功能性的方式完成它(我使用下划线.js),但我无法找到实现它的方法
types = [];
_.each(response, function(arr1, key1) {
_.each(arr1, function(arr2, key2) {
types.push(arr2.type);
});
});
types = _.uniq(types);
但这太难看了。你能帮我找出一种更好的写代码的方法吗?
谢谢!
这应该有效:
types = _.chain(input) // enable chaining
.values() // object to array
.flatten() // 2D array to 1D array
.pluck("type") // pick one property from each element
.uniq() // only the unique values
.value() // get an unwrapped array
Fiddle:http://jsfiddle.net/NFSfs/
当然,如果你想的话,你可以删除所有空白:
types = _.chain(input).values().flatten().pluck("type").uniq().value()
或无链接:
types = _.uniq(_.pluck(_.flatten(_.values(input)),"type"));
flatten似乎对对象有效,尽管文档明确指出不应该这样做。如果您希望针对实现进行编码,可以省略对values
的调用,但我不建议这样做。总有一天,实现可能会发生变化,让您的代码神秘地崩溃。
如果您只想要较短的代码,可以将对象展平为单个数组,然后映射该数组。
var types = _.unique(_.map(_.flatten(_.toArray(response)), function(arr) {
return arr.type;
}));
这是另一个版本。大部分只是为了好奇。
var types = _.unique(_.pluck(_.reduce(response, _.bind(Function.apply, [].concat), []), "type"));
这是另一个。
var types = _.unique(_.reduce(response, function(acc, arr) {
return acc.concat(_.pluck(arr,"type"));
}, []));
还有另一个。
var types = _.unique(_.pluck([].concat.apply([], _.toArray(response)), "type"))
相关文章:
- 如何使用json将对象列表从java转换为javascript
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 用javascript从列表对象(JSON的)构建diffrent选项卡
- 如何更改列表.js列表对象中的选项
- 如何使用变量值将列表<对象>序列化为 JSON
- 将列表对象从javascript转换为JSON
- 将对象推入对象列表对象
- 如何从列表对象生成li和锚点标记
- AngularJS-通过dons't在ng模型中设置列表对象
- 隐藏一定数量的列表对象
- 要切换的Javascript类列表对象和查询选择器
- 从动态列表对象中获取对象
- jPlayer不播放播放列表对象的全局声明中的歌曲
- Spring MVC @ResponseBody, JSON, JSP.试图返回列表<对象>从控制器到JSP
- Javascript列表对象可以'不添加JSON?node . js,重火力点
- javascript从文件列表创建文件列表对象
- 流星 - 在列表对象中呈现所有者的名称
- UndefinedError:列表对象没有未定义元素