检查jquery中对象中是否存在键

时间:2017-04-13 22:41:25

标签: jquery arrays object push each

我有一个开发的代码,

var list = [];
// read data from api

$.each(data.samples, function(k, v) {
  if (!list.hasOwnProperty(v.key) 
    list.push({
      'key': v.key,
      'title': v.title.
      'sent': false
    }); 

console.log(list);

更新(来自API的示例数据)

var obj ={
    "expand": "schema,names",
    "startAt": 0,
    "maxResults": 50,
    "total": 4,
    "samples": [
        {
            "key": "s-111",
            "title": {
                "summary": "title 1"
            }
        },
        {
            "key": "s-112",
            "title": {
                "summary": "title 2"
            }
        },
        {
            "key": "s-113",
            "title": {
                "summary": "title 3"
            }
        },
        {
            "key": "s-114",
            "title": {
                "summary": "title 3"
            }
        }
    ]
}

还有一些必要的嵌套键,我也不需要它。 但是我只需要检查新密钥是否存在,每隔2分钟更新一次API时,将新密钥添加到我的列表中

2 个答案:

答案 0 :(得分:0)

一个问题是您正在检查对象的属性而不是对象的值,其中v.key未设置为推送到list数组的任何对象的属性。

您可以使用.some()迭代数组中的对象,通过返回v.key来检查数组中的任何对象是否具有o.key === v.key值,因为v.key设置为推送到数组的对象的"key"属性的值



var obj = {
  "expand": "schema,names",
  "startAt": 0,
  "maxResults": 50,
  "total": 4,
  "samples": [{
      "key": "s-111",
      "title": {
        "summary": "title 1"
      }
    },
    {
      "key": "s-112",
      "title": {
        "summary": "title 2"
      }
    },
    {
      "key": "s-113",
      "title": {
        "summary": "title 3"
      }
    },
    {
      "key": "s-114",
      "title": {
        "summary": "title 3"
      }
    },
    // duplicate entry to exclude
    {
      "key": "s-114",
      "title": {
        "summary": "title 3"
      }
    }
  ]
}

var list = [];
// read data from api

$.each(obj.samples, function(k, v) {
  if (!list.some(function(o) {
      return o.key === v.key
    }))
    list.push({
      "key": v.key,
      "title": v.title,
      "sent": false
    });
});

console.log(list);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我不完全确定您要问的是什么,但根据我的理解,如果来自data.samples的密钥不是,那么您想要做的就是将对象添加到您的列表中已列入名单?

在上述情况下,你想要做的是这样的事情:

var list = [];
// read data from API

// Note Key, Value change
$.each(data.samples, function(key, value) {
    if (!list.includes(key)) {
        list.push({
            'key': v.key,
            title: v.title,
            'sent': false
        }); 
    }
}
console.log(list);

由于我现在没有环境可以测试,我无法告诉您这是否适用于您的目的。

但是,如果您尝试根据添加不在列表中,则需要使用key 参数,(参数的v.key值。

虽然您可以使用hasOwnProperty(...)方法,但我建议您使用更为特定于数组的includes(...)方法。可以找到文档JQuery Docs

同样,您可能需要进行一些额外的故障排除和哄骗,以使其适合您的特定应用。

祝你好运&amp;&amp;希望这有帮助!