0

搜索并尝试没有运气,我想是时候问了;-)

JSON 数组Objects 作为 items发送,在每个 object 内部,都有与 keys 关联的值,即

[{"name":"Jack", "message":"Hello!"},
 {"name":"John", "message":"Hi!"},
 {"name":"Jack", "message":"Hello Again!"}] 

我在用

$.each(json, function(){//--Do a Listing--//});

呈现如下列表:

<ul>
    <li><span>Jack:</span>Hello!</li>
    <li><span>John:</span>Hi!</li>
    <li><span>Jack:</span>Hello Again!</li>
</ul> 

作为循环所有项目。但是,如果您注意到在 JSON 包中,会有重复的键 - 我想要的“名称”,而不是制作单独的列表项,以使它们堆叠在一起,例如显示为“杰克 +1”是这样的:

<ul>
    <li><span>Jack: (+1)</span>Hello!</li>
    <li><span>John:</span>Hi!</li>
</ul> 

到目前为止,循环不是问题。问题是如何在循环出它们的同时将值与相同的键进行比较,然后对它们做一些事情。

提前致谢!

4

2 回答 2

1

我建议您根据您拥有的对象构建另一个对象,但形式更方便。像这个:

{
   "Jack": {
      "message": "Hello!",
      "times": 2
   },
   "John": {
      "message": "Hey",
      "times": 1
   }
}

所以你的程序将有两个循环。第一个简化初始数组,第二个循环呈现 html。

于 2013-07-05T14:30:47.493 回答
0

你应该这样做:

var data = [{"name":"Jack", "message":"Hello!"},
   {"name":"John", "message":"Hi!"},
   {"name":"Jack", "message":"Hello Again!"}];
var messages = [];

for(var i=0; i < data.length; i++){
   if(!messages[data[i].name]){
      messages[data[i].name] = 0;
   }
   messages[data[i].name] += 1;
}

console.log(messages);

/*Output
   [Jack: 2, John: 1]
*/

如果您不需要同时发送这些消息

于 2013-07-05T19:53:39.853 回答