我有一个开发的代码,
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时,将新密钥添加到我的列表中
答案 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;
答案 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;希望这有帮助!