给定一个对象数组,创建一个函数,该函数返回一个 Object,该 Object 具有按类型分组的路径数组
Given an array of objects, create a function that returns an Object that has an array of paths grouped by type
我有一个对象数组,如下所示:
var data = [
{name : 'xxxx' , type: 'jpeg' , path: '../'},
{name : 'yyyy' , type: 'gif' , path: '../'},
{name : 'zzzz' , type: 'jpeg' , path: '../'}
];
我希望结果采用以下格式:
{
jpeg: ['../xxxx.jpeg', '../zzzz.jpeg'],
gif:['../yyyy.gif']
}
我的尝试:
function transformData(data) {
var result = {};
if (data && data.length > 0) {
for (var i = 0; i < data.length; i++) {
result[data[i].type] = [data[i].path + data[i].name];
}
}
console.log(result);
}
transformData(data);
由于有几个答案,我将根据reduce
给出一个功能:
var arr = data.reduce(function(r,m){
(r[m.type]||(r[m.type]=[])).push(m.path+m.name+'.'+m.type);
return r;
},{});
您可以使用 Array.prototype.reduce() 函数来获得优雅的解决方案。
// Your data
var data = [
{name : 'xxxx' , type: 'jpeg' , path: '../'},
{name : 'yyyy' , type: 'gif' , path: '../'},
{name : 'zzzz' , type: 'jpeg' , path: '../'}
];
// Solution
var res = data.reduce(function(prev, current) {
((prev[current.type])||(prev[current.type] = [])).push( current.path + current.name + '.' + current.type );
return prev;
}, {});
// console.log( res );
试试这个
var data = [
{name : 'xxxx' , type: 'jpeg' , path: '../'},
{name : 'yyyy' , type: 'gif' , path: '../'},
{name : 'zzzz' , type: 'jpeg' , path: '../'}
];
var res = {},
len = data.length, i;
for (i = 0; i < len; i++) {
if (!res[data[i].type]) {
res[data[i].type] = [];
}
res[data[i].type].push(data[i].path + data[i].name + '.' + data[i].type);
}
例
您可以使用
forEach
执行此操作:
var data = [
{name : 'xxxx' , type: 'jpeg' , path: '../'},
{name : 'yyyy' , type: 'gif' , path: '../'},
{name : 'zzzz' , type: 'jpeg' , path: '../'}
];
var result = {};
data.forEach(function(elem){
result[elem.type] = result[elem.type] || [];
result[elem.type].push(elem.path + elem.name + '.' + elem.type);
});
请记住,Array.prototype.forEach()
不能在 IE8 或更低版本中使用,但 mdn 页面有一些填充物。
相关文章:
- 如何取消object.prototypes javascript的一个函数
- 如何在jquery中为object键创建一个工作变量以避免额外的代码
- 在JavaScript中,is't Object Literal Notation只是字典的另一个名称
- 为什么使用 Object('123') 创建对象会创建一个 String() 对象,但 typeof 是“对象”
- 我正在从API提取一个包含视频的Object标签.如何在javascript中暂停视频
- 给定一个对象数组,创建一个函数,该函数返回一个 Object,该 Object 具有按类型分组的路径数组
- requireJS Object 原型可能只是一个 Object 或 null - jQuery
- 创建一个具有 3 个方法的 JavaScript 对象抛出 Object 没有方法
- .get()需要回调函数,但得到了一个[object Undefined]
- MEANJS TypeError:Route.all()需要回调函数,但得到了一个[object Undefined]
- 错误:Route.put()需要回调函数,但得到了一个[object Undefined]
- 为什么我得到一个[object元素]
- 在Javascript中创建一个Object(类)结构
- ng-options在select中返回一个Object而不是String
- 从另一个对象创建一个Object数组
- 是否基于一个Object创建一系列下拉菜单,其中键为:[下拉选项数组]对
- Ember.js-使用removeObject只删除一个Object实例
- 用Javascript创建一个Object
- 量角器错误消息返回一个Object
- 车把访问一个[object object]