我一直在使用JS(ExtJS)一段时间,我正在尝试执行以下操作, 假设这个对象数组:
Array Tickets:
[0]{ticket: 'TICKET1', associated_val: 'AB'}
[1]{ticket: 'TICKET1', associated_val: 'XY'}
[2]{ticket: 'TICKET1', associated_val: 'CD'}
[3]{ticket: 'TICKET2', associated_val: 'YZ'}
[4]{ticket: 'TICKET2', associated_val: 'EF'}
[5]{ticket: 'TICKET3', associated_val: 'AB'}
[6]{ticket: 'TICKET4', associated_val: null}
我想获得以下内容:
Summarized Array:
[0]{ticket: 'TICKET1', associated_val_array: ['AB', 'XY', 'CD']}
[1]{ticket: 'TICKET2', associated_val_array: ['YZ', 'EF']}
[2]{ticket: 'TICKET3', associated_val_array: ['AB']}
[3]{ticket: 'TICKET4', associated_val_array: []}
我正在努力做到这一点找到重复的东西,但我想到的只是类似的东西:
var summarizedArray = [];
for (var i = 0; i < data.length -1; i++) {
if (data[i+1].ticket == data[i].ticket) {
var myObj = {};
var associated_val_array =[];
associated_val_array.push(data[i].associated_val);
myObj.set('ticket', data[i].ticket);
myObj.set('associated_val_array', associated_val_array);
summarizedArray.push(myObj);
}
}
但我有点阻止如何使这个工作来获得汇总数组。
任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:2)
您可以执行类似
的操作
var array = [{
ticket: 'TICKET1',
associated_val: 'AB'
}, {
ticket: 'TICKET1',
associated_val: 'XY'
}, {
ticket: 'TICKET1',
associated_val: 'CD'
}, {
ticket: 'TICKET2',
associated_val: 'YZ'
}, {
ticket: 'TICKET2',
associated_val: 'EF'
}, {
ticket: 'TICKET3',
associated_val: 'AB'
}, {
ticket: 'TICKET4',
associated_val: null
}];
var newarray = [],
tmp = {},
item;
for (var i = 0; i < array.length; i++) {
item = array[i];
if (!tmp[item.ticket]) {
tmp[item.ticket] = {
ticket: item.ticket,
associated_val_array: []
};
newarray.push(tmp[item.ticket]);
}
if (item.associated_val != null) {
tmp[item.ticket].associated_val_array.push(item.associated_val);
}
}
console.log(newarray)
&#13;
答案 1 :(得分:0)
您可以先获取唯一的门票:
var tickets = data.map(function(obj) {
return obj.ticket
}).filter(function(ticket, i, xs) {
return xs.indexOf(ticket) === i
})
然后执行过滤器以匹配ticket属性并映射值:
var result = tickets.map(function(ticket) {
return {
ticket: ticket,
associated_val_array: data.filter(function(obj) {
return obj.ticket === ticket && obj.associated_val != null
}).map(function(obj) {
return obj.associated_val
})
}
})