搜索并尝试没有运气,我想是时候问; - )
JSON数组与对象作为项目一起发送,在每个对象中,有与键相关联的值,即
[{"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包中,会有重复的键 - 我想要的'name',而不是制作一个单独的列表项,以使它们堆叠在一起,例如显示为'Jack +1',类似于:
<ul>
<li><span>Jack: (+1)</span>Hello!</li>
<li><span>John:</span>Hi!</li>
</ul>
到目前为止,循环不是问题。问题是如何将值与同一个键进行比较,同时将它们循环出来,然后对它们执行某些操作。
提前致谢!
答案 0 :(得分:1)
我建议你根据你拥有的一个对象构建另一个对象,但是更方便。像这样:
{
"Jack": {
"message": "Hello!",
"times": 2
},
"John": {
"message": "Hey",
"times": 1
}
}
所以你的程序将有两个循环。第一个简化了初始数组,第二个循环渲染了html。
答案 1 :(得分: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]
*/
如果您不需要同时发送消息