检查jquery的对象中是不是存在键

Posted

技术标签:

【中文标题】检查jquery的对象中是不是存在键【英文标题】:check if key exists in object in jquery检查jquery的对象中是否存在键 【发布时间】:2017-09-10 04:45:08 【问题描述】:

我有一个开发的下面的代码,

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"
            
        
    ]

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

【问题讨论】:

能否提供来自 API 的示例数据? 什么是问题?在数组list 上调用!list.hasOwnProperty(v.key) 的预期结果是什么? 错字 - 你应该在标题后加一个逗号,例如:title: v.title。应该是标题:v.title, 【参考方案1】:

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

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

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>

【讨论】:

只是别的东西,我如何通过键 s-114 @guest271314 从列表中删除 您可以使用Array.prototype.findIndex() 获取数组中"key" 属性值为"s-114" 的对象的索引。以索引和1 作为参数在数组上调用.splice(),或在指定索引的数组上调用delete 删除。【参考方案2】:

我不完全确定您要问的是什么,但据我了解,如果来自 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 进行添加,您将需要使用key 参数,(not 参数的v.key 值)根据JQuery Docs。

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

同样,您可能需要进行一些额外的故障排除和劝说才能使其适用于您的特定应用程序。

祝你好运&&希望这会有所帮助!

【讨论】:

注意,list 将是一个对象数组。

以上是关于检查jquery的对象中是不是存在键的主要内容,如果未能解决你的问题,请参考以下文章

检查对象中是不是存在键[重复]

检查对象数组中是不是存在具有特定键值的对象

如何检查 JSON 对象数组中是不是存在键

如何检查javascript中的对象中是不是存在键[重复]

即使未定义,也检查嵌套键是不是存在[重复]

检查formdata对象键是不是存在