Javascript 如何过滤对象数组?
我有一个从web服务中提取的对象数组,看起来像这样Javascript 如何过滤对象数组?,javascript,Javascript,我有一个从web服务中提取的对象数组,看起来像这样 { ArticleID: "ABC123", Region: "US", PubTypeID: "EO", PubType: "Europe Order", Created: "01/01/2013", Scheduled: "03/02/2013" } ArticleID、Region和PubTypeID组成一个复合键。数据源是一个表,无法更改,但我需要获取唯一的项以显示类似于仪表板的界面。因此,显示唯
{
ArticleID: "ABC123",
Region: "US",
PubTypeID: "EO",
PubType: "Europe Order",
Created: "01/01/2013",
Scheduled: "03/02/2013"
}
ArticleID、Region和PubTypeID组成一个复合键。数据源是一个表,无法更改,但我需要获取唯一的项以显示类似于仪表板的界面。因此,显示唯一的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怎么做吗?为了像您描述的那样将这些数据构建到一个表中,我会首先组织数据,使其与您想要做的匹配。因此,我将迭代返回的数据并将其转换为:
{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都具有相同的状态,因此在重构对象时可以忽略这一点,并在构建表时插入
如果您可以控制服务器端代码,最好在将其传递给客户端之前执行此对象重组工作。您可以使用
Array.prototype.filter
,对所有条目进行排序,因为您知道所有的文章ID(如果不知道,则必须迭代输入并收集它们)
var输入=[{
ArticleID:“ABC123”,
地区:“美国”
},{
ArticleID:“ABC456”,
地区:“美国”
}];
变量区域=[“ABC123”、“ABC456”];
var条款=[];
弗雷赫(
功能(reg,i){
articles[i]=input.filter(函数(el){return el.ArticleID==reg});
}
);
控制台日志(区域);
//区域[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)
你有把小提琴。查看结果对象(使用chrome或其他控制台),您将看到数据现在是如何按ArticleID分组的
编辑:我用更干净的版本替换了代码。那么在fiddle操作系统中,键是字段名还是字段中的值?顺便说一句谢谢对不起,你介意用Os吗?。我不明白这个问题。你能再解释一下你有什么问题吗?:)对不起,我在手机上打字。。。我的意思是,在您发布的SQL中,键是字段名还是字段值?。例如,它是数据[“ArticleID”]还是数据[“ABC123”]?在我们正在生成的新数组中,每组对象的键是对象共享的值,例如[“ABC123”]。我们使用键(articleID)的地方就是定义X变量的地方。但是我们在for循环中使用“key”作为变量,让我们选择每个对象,这可能有点混乱。我做了这种调试,所以你可以在控制台上读取这些变量和键的值。最后,我还加入了一个在控制台中打印渴望的结果,比如说一种使用newArray的方法。
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)