如何知道一个特定的值在复杂的JSON中是否可用
How to know a particular value is available or not in a complex JSON
我有一个类似的json
myPermission=[
{
"root_permission_name":"HR",
"root_pk":3,
"child_list":[
{
"child_pk":8,
"child_permission_name":"Employee Management",
"sub_child_list":[
]
}
]
},
{
"root_permission_name":"Finance",
"root_pk":8,
"child_list":[
{
"child_pk":20,
"child_permission_name":"Fees",
"sub_child_list":[
{
"sub_child_permission_name":"Create Fees",
"sub_child_pk":5
},
{
"sub_child_permission_name":"Schedule Fee Collection Dates ",
"sub_child_pk":6
}
]
},
{
"child_pk":21,
"child_permission_name":"Category",
"sub_child_list":[
]
},
{
"child_pk":26,
"child_permission_name":"Finance Reports",
"sub_child_list":[
{
"sub_child_permission_name":"Report",
"sub_child_pk":17
},
{
"sub_child_permission_name":"Compare Transection",
"sub_child_pk":18
},
{
"sub_child_permission_name":"Fee Receipts",
"sub_child_pk":19
}
]
}
]
}
]
有没有一种方法可以让我在不使用FOR循环的情况下知道json中的特定值(例如"Fees")是否可用?
如果有人通过RXJS解决这个问题,那将是值得注意的。
注意:我不必使用循环
这个怎么样:
var presence = JSON.stringify(yourJSON).indexOf('"Fees"') > -1;
或者这个:
var presence = JSON.stringify(yourJSON).indexOf(':"Fees"') > -1;
我只是将您的object
字符串化,然后检查是否存在"Fees"
。如果它是-1,则它不存在,否则它存在。
有没有一种方法可以让我在不使用FOR循环的情况下知道json中的特定值(例如"Fees")是否可用?
我假设你指的是for
循环或任何其他循环构造。如果是这样,答案是"不,没有,无论如何都不合理。"
因此,您使用循环结构。具体来说,嵌套循环结构,因为Fees
在子列表上:
var hasFees = myPermission.some(function(entry) {
return entry.child_list.some(function(child) {
return child.child_permission_name == "Fees";
});
});
Array#some
为数组中的每个条目调用一次回调,在回调第一次返回真实值时停止。如果回调返回了真值,则返回值为true
;如果未返回,则返回false
。所以它对于这样的搜索很方便。
实时示例:
var myPermission = [{
"root_permission_name": "HR",
"root_pk": 3,
"child_list": [{
"child_pk": 8,
"child_permission_name": "Employee Management",
"sub_child_list": [
]
}]
}, {
"root_permission_name": "Finance",
"root_pk": 8,
"child_list": [{
"child_pk": 20,
"child_permission_name": "Fees",
"sub_child_list": [{
"sub_child_permission_name": "Create Fees",
"sub_child_pk": 5
}, {
"sub_child_permission_name": "Schedule Fee Collection Dates ",
"sub_child_pk": 6
}]
}, {
"child_pk": 21,
"child_permission_name": "Category",
"sub_child_list": [
]
}, {
"child_pk": 26,
"child_permission_name": "Finance Reports",
"sub_child_list": [{
"sub_child_permission_name": "Report",
"sub_child_pk": 17
}, {
"sub_child_permission_name": "Compare Transection",
"sub_child_pk": 18
}, {
"sub_child_permission_name": "Fee Receipts",
"sub_child_pk": 19
}]
}]
}];
var hasFees = myPermission.some(function(entry) {
return entry.child_list.some(function(child) {
return child.child_permission_name == "Fees";
});
});
document.body.innerHTML = hasFees;
您的要求有点不清楚。基于这个问题,我的猜测是,这是一项老师希望学生以功能性的方法而不是命令性的方法来完成的作业。因此提出了"不适用于循环"的标准。
下面的函数将递归地遍历json中的所有值,并查找特定的值。如果该值存在(无论属性名称如何),它都将返回true。
它使用Array.some
,它将"测试数组中的某个元素是否通过所提供函数实现的测试"
var hasPerm = myPermission
.some(function (arr) {
return hasPermission(arr, 'Fees')
});
console.log(hasPerm); // true/false
function hasPermission(arr, needle) {
return Object
.keys(arr)
.some(function(key) {
if (typeof arr[key] === 'object') {
return hasPermission(arr[key], needle);
} else {
return arr[key] === needle;
}
})
}
它可以很容易地扩展为只查找某些属性的值。由于RxJS也有some
方法,因此在该上下文中使用应该不会有任何问题。
相关文章:
- 如何使用javascript过滤复杂的json对象
- 解析复杂的json-jquery
- 使用angular显示复杂json中的列表
- 关于复杂JSON解析(angularjs和javascript)的问题
- 使用 AngularJS 的复杂 JSON 响应
- 对象和数组的复杂 JSON 嵌套
- 复杂 JSON 处理期间的“范围错误: 超出最大调用堆栈大小”
- 复杂 JSON 上的最小循环使用
- JavaScript解析复杂JSON
- angular ng选项复杂json数组
- 从angular js中的复杂JSON数组中获取值
- 如何合并两个只有唯一或不同值的复杂JSON对象,这些值只显示在结果数组中
- 通过Javascript对复杂JSON对象进行交互的最简单方法
- 复杂JSON结构
- 如何将JS中的复杂JSON转换为Silverlight中的.net类
- 嵌套复杂JSON中的搜索键
- KendoUI网格-键不一致的复杂JSON
- ng-repeat(迭代)在 Angular 中的复杂 json 对象上
- JavaScript 中的复杂 JSON 字符串解析
- 查询复杂json