保持数组中的对象主列表,在添加新对象之前检查数组是否存在

时间:2016-07-26 04:09:05

标签: arrays object search

以下代码无法按预期运行。它从不检查主列表中的服务器。难道我做错了什么?

var servers = [];
$.serverlist.addServers = function(jsonData) {
for (var server in servers) {
    if (server["ID"] == jsonData["ID"]) {
        // server exists, dont add, just update
    } else {
        //server doesnt exist, just add it
    }
}

我收到的jsonData格式如下:

{ "ID": 1, "something else": "Value", "another key": "Key Val" }

因此,当它进入数组时,数组状态(如果有多个添加)

[
 0:
   {
    "ID":1,
    "something else": "Value",
    "another key": "Key Val"
   }
  1: 
   {
    "ID":2,etc...
   } 
]

1 个答案:

答案 0 :(得分:0)

尝试测试数组长度。

if( servers.length > 0 ){
    // Server exist!
    console.log("Append!");
}else{
    // Doesn't...
    console.log("Create the array.");
}

修改

对于特定对象,应该这样做:

if( servers.indexOf(jsonData["ID"]) != -1 ){
    // Data is in array
    console.log("It's there.");
}else{
    // Doesn't...
    console.log("It's not there.");
}



第二次编辑

我做了CodePen它应该是什么样子 但是我不确定你的数据......当你控制登录它时它看起来像DOM对象格式 我认为它与json或对象不同......

我根据一组对象制作了我的例子。 查看CodePen控制台。

var servers = [
  {
    "ID":1,
    "something else": "Value",
    "another key": "Key Val"
   },
  {
    "ID":2,
    "something else": "another Value",
    "another key": "another Key Val"
   },
  {
    "ID":3,
    "something else": "Boring Value",
    "another key": "Interesting!"
   },
  {
    "ID":4,
    "something else": "arrggg.",
    "another key": "Yeah!"
   } 
];

for(i=0;i<servers.length;i++){
  var temp = servers[i];
  if (temp.ID== 3){
    console.log("Found!");
    break;                  // Exits the loop when found ID = 3
  }else{
    console.log("NOT fount yet... Still checking.");
  }
}