我不确定如何正确地将这个问题放到我想去的地方。我有一个运行良好的JavaScript。它返回了一组庞大的数据,我需要将它们分组以便以更易读的方式显示。
示例代码
function parsePData(data) {
var xmlDoc = $j.parseXML(data.d);
var $xml = $j(xmlDoc);
var items = $xml.find("Page");
userFavorites = $xml;
var newHtml = ""
for (var i = 0; i < items.size(); i++) {
newHtml += "<div style='margin:5px; padding:5px; border-bottom: 1px dotted #9C9C9C; font- size:95%'><div> <b>#" + (i + 1) + ".</b>Item to Publish: " + items[i].getAttribute("Title") +
"</div><div class='itpPub'> Publication Target: " + items[i].parentNode.getAttribute("Title") +
"</div></div>";
}
我需要一些关于如何分组此输出的相关帖子的指示或指示。如果我错过了明显的帖子,请道歉。
代码创建以下输出:
Item to Publish: a , Publication Target: 1
Item to Publish: a , Publication Target: 2
Item to Publish: b , Publication Target: 7
我需要去:
Item to Publish: a , Publication Target: 1, 2
Item to Publish: b , Publication Target: 7
答案 0 :(得分:1)
因此,阅读您的帖子,听起来您需要在将数据附加到DOM之前对其进行预处理:
输出你得到:
要发布的项目:a, 出版目标:1
要发布的项目:a, 出版目标:2
要发布的项目:b, 出版目标:7
您想要的输出:
要发布的项目:a, 出版目标:1,2
要发布的项目:b, 出版目标:7
我们可以使用JS对象文字的键/值配对来帮助实现这一目标。为了考虑多个值,我们将包含值的数组存储到键/值对中。
由于我无法访问您的items数组实际返回的内容,因此我只创建了一些测试数据以显示它应该如何工作。 JSFIDDLE:http://jsfiddle.net/biz79/pLb38t0y/
希望您可以根据自己的目的进行调整。
// create storage object literal and key/value vars
var storage = {};
var key,value;
// some test data
var items = [
{ "Title" : "a", "Value" : "1" },
{ "Title" : "a", "Value" : "2" },
{ "Title" : "b", "Value" : "3" }
];
// iterate items array and populate storage
for (var i =0; i<items.length; i++) {
key = items[i].Title;
value = items[i].Value;
// if the key exists in storage, add to it
if ( key in storage ) {
storage[key].push( value );
}
else {
// if the key doesn't exist, create key and add to it
storage[key] = [];
storage[key].push(value);
}
}
// iterate storage for answers
for (var prop in storage) {
if (storage.hasOwnProperty(prop)){
alert("Item to Publish: " + prop);
alert("Publication Target: " + storage[prop].join(','));
}
}
答案 1 :(得分:0)
对于这样的情况,我喜欢使用对象属性是唯一的这一事实。我已经尝试过不要修改你的代码了。我引入了一个objectItems对象,并将其属性用于组标题。在每个标题中,我存储了一个包含该组标题的数组。
输出或多或少相同。在一个新循环(for..in循环到属性上的迭代器)中,您可以输出键(= propety name = group title),以及该属性的数组值中的连接值。
function parsePData(data) {
var xmlDoc = $j.parseXML(data.d);
var $xml = $j(xmlDoc);
var items = $xml.find("Page");
userFavorites = $xml;
// Create an object to cotnain the titles.
var groupedItems = {};
for (var i = 0; i < items.size(); i++) {
// If the grouped object doesn't contain this title yet, add it and initialize to
// and empty array.
var prop = items[i].getAttribute("Title");
if (! groupedItems.hasOwnProperty(prop))
groupedItems[prop] = new Array();
// Push new item onto the array.
groupedItems[prop].push(items[i].parentNode.getAttribute("Title"));
}
var newHtml = ""
// Actual output using the grouped array.
for (var k in groupedItems)
{
newHtml += "<div style='margin:5px; padding:5px; border-bottom: 1px dotted #9C9C9C; font- size:95%'><div> <b>#" + (i + 1) + ".</b>Item to Publish: " + k +
"</div><div class='itpPub'> Publication Target: " +
groupedItems[k].join(',') +
"</div></div>";
&#13;