我有一个对象数组如下:
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);
答案 0 :(得分:1)
由于有一些答案,我将根据reduce
给出一个功能性答案:
var arr = data.reduce(function(r,m){
(r[m.type]||(r[m.type]=[])).push(m.path+m.name+'.'+m.type);
return r;
},{});
答案 1 :(得分:0)
试试这个
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);
}
答案 2 :(得分:0)
您可以使用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 );
答案 3 :(得分:-1)
您可以使用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页面有一些polyfill。