Javascript - 使用关联键循环和比较数组值

时间:2013-07-05 14:22:31

标签: javascript loops object compare associative-array

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

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> 

到目前为止,循环不是问题。问题是如何将值与同一个键进行比较,同时将它们循环出来,然后对它们执行某些操作。

提前致谢!

2 个答案:

答案 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]
*/

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