我有一个从Web服务中提取的对象数组,看起来像这样。
{
ArticleID: "ABC123",
Region: "US",
PubTypeID: "EO",
PubType: "Europe Order",
Created: "01/01/2013",
Scheduled: "03/02/2013"
}
ArticleID,Region& PubTypeID组成一个复合键。数据源是一个表,无法更改,但我需要获取Unique项以显示类似界面的仪表板。因此,显示唯一的ArticleID,但将其下的文章分组。界面看起来应该是这样的。
ArticleID Status
----------------------
ABC123 Scheduled
Region:US Scheduled: 02/02/2013
Region:JP Scheduled: 05/02/2013
Region:OE Scheduled: 03/02/2013
Region:EU Scheduled: 04/02/2013
ABC456 Ready to Schedule
Region:US
Region:US
Region:US
ABC789 Sent
Region:EU Sent On: 01/02/2013
Region:EU Sent On: 01/02/2013
Region:EU Sent On: 01/02/2013
Region:EU Sent On: 01/02/2013
状态由日期决定。如果一篇文章中的一个项目有一个日期而另一个项目没有,状态会是什么,我也会对状态有什么样的困境?
如果数据已经标准化,我在这里没有问题,因为我可以做多个选择并构建输出,但我只有一个平坦的结果集,所以需要在Javascript中进行“选择”。
有人可以帮我解决一下如何在Javascript中执行此操作吗?
答案 0 :(得分:0)
为了构建这些数据以便按照您的描述进入表格,我首先会组织数据,使其与您想要做的事情相匹配。因此,我不会使用单个对象,而是遍历返回的数据并将其转换为:
{ArticleID: "ABC123",
Status: "Scheduled",
Articles: {
ArticleID: "ABC123",
Region: US,
PubTypeID: "EO",
PubType: "Europe Order",
Created: "01/01/2013",
Scheduled: "03/02/2013"
},{
ArticleID: "ABC234",
Region: US,
PubTypeID: "EO",
PubType: "Europe Order",
Created: "01/01/2013",
Scheduled: "03/02/2013"
}
}
然后基于此结构构建表。您需要在函数中进行一些计算以确定状态。我不明白这个给你一个特定的答案,但看起来所有常见的文章ID都具有相同的状态,因此在重构对象时可以忽略这些,并在构建表时插入。
如果您对服务器端代码有任何控制权,那么在将此对象重组工作传递给客户端之前,这样做会好得多。
答案 1 :(得分:0)
您可以使用Array.prototype.filter
对所有条目进行排序,因为您知道所有文章ID(如果不知道,则必须迭代输入并收集它们)。
var input = [{
ArticleID: "ABC123",
Region: "US"
},{
ArticleID: "ABC456",
Region: "US"
}];
var regions = ["ABC123","ABC456"];
var articles = [];
regions.forEach(
function(reg,i){
articles[i] = input.filter( function(el){ return el.ArticleID == reg} );
}
);
console.log(regions);
//regions[0] <= array with all articles with regionID "ABC123"
//regions[1] <= - " - "ABC456"
现在articles
包含一个数组,其中所有文章按ArticleID排序。
请注意,这是IE9 +代码,为了使其在IE8及更低版本中运行,您需要一个垫片filter
和forEach
,您可以在相应的MDN-Articles上找到它。
答案 2 :(得分:0)
我认为你需要重新安排由ArticleID订购的数据。并假设你将有很多文章。像这个迭代这样的东西可以做重新安排的任务。然后,您可以轻松地通过打印有用信息的新对象进行迭代
var x
var y = 0;
var newArray = new Array();
for(key in data){
x = data[key].articleID; //The value of the key you want to use (ArticleID)
newArray[x] = newArray[x] || []
newArray[x][y] = data[key];
y++
}
console.log(newArray)
Here你有一个小提琴。查看生成的对象(使用chrome或其他控制台),您将看到数据现在如何按ArticleID分组;
编辑:我用更干净的版本替换了代码。