我有些类似的东西
{
"tasks": [
{
"name": "Task YES",
"finished": false,
"id": 1
},
{
"name": "Task NO",
"finished": false,
"id": 2
}
]
}
还有一些价值
let someValue = 'Task NO';
如何检查JSON中是否已经有值?
答案 0 :(得分:3)
完成目标的一种方法是使用Array.prototype.find()
。
let task = tasks.find(task => task.name === someValue);
如果找到的任务与name
的{{1}}相同,则someValue
等于找到的任务。如果找不到任何内容,则task
将是task
。
undefined
答案 1 :(得分:1)
这似乎是some的一项工作,它测试数组中的至少一个元素是否通过了提供的功能实现的测试。
let obj = {
"tasks": [
{
"name": "Task YES",
"finished": false,
"id": 1
},
{
"name": "Task NO",
"finished": false,
"id": 2
}
]
}
console.log(obj.tasks.some(i => i.name == 'Task NO'))
console.log(obj.tasks.some(i => i.name == 'Task YES'))
console.log(obj.tasks.some(i => i.name == 'Task ABC123'))
答案 2 :(得分:0)
尝试以下功能:
function isValueExist(obj, value) {
if (!(obj instanceof Object) && 'function' !== typeof obj) {
return obj === value;
}
for (var prop in obj) {
if (isValueExist(obj[prop], value)) {
return true;
}
}
return false;
}
答案 3 :(得分:0)
JSON.parse
reviver parameter可用于递归枚举,修改或排除值:
var someValue = 'Task NO', json = '{"tasks":[{"name":"Task YES","finished":false,"id":1},{"name":"Task NO","finished":false,"id":2}]}';
var obj = JSON.parse(json, function(key, value) {
if (value == someValue)
console.log(`found: '${value}' at key '${key}'`);
return value; // optional if the result obj is needed
});
答案 4 :(得分:-1)
效率很低,但带有Boolean对象的hacky版本-))
Boolean(d.tasks.filter(e => e.name == "Task NO"))
编辑
已保存7个字节-))thanks to @Get Off My Lawn
!!d.tasks.filter(e => e.name == "Task NO")
另一个更新。
作为@Andreas commented,Boolean([])
返回true。因此,答案应更新为
!!d.tasks.filter(e => e.name == "Task NO").length