检查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的对象中是不是存在键的主要内容,如果未能解决你的问题,请参考以下文章