Javascript 如何动态删除嵌套的json密钥?
这是示例json:Javascript 如何动态删除嵌套的json密钥?,javascript,angularjs,json,Javascript,Angularjs,Json,这是示例json: { "search": { "facets": { "author": [ ], "language": [ { "value": "nep", "count": 3 }, { "value": "urd", "count": 1 } ], "source": [ { "value": "West Bengal State Council of Vocat
{
"search": {
"facets": {
"author": [
],
"language": [
{
"value": "nep",
"count": 3
},
{
"value": "urd",
"count": 1
}
],
"source": [
{
"value": "West Bengal State Council of Vocational Education & Training",
"count": 175
}
],
"type": [
{
"value": "text",
"count": 175
}
],
}
}
有几种方法可以删除keysearch.facets.source
:
delete search.facets.source
删除jsobObj['search']['facets']['source']
var jsonKey='source';
parse(angular.toJson(jsonObj),函数(键,值){
if(key!=jsonKey)
返回值;
});代码>
以上1和2不是动态的,3是一种方式,但不是一种正确的方式。因为若源存在于另一个节点中,那个么它将无法工作。请任何人都可以告诉我如何在任何类型的嵌套键中动态删除它。因为我们无法在上面2中动态生成数组序列。假设您从以下方面开始:
let path = 'search.facets.source';
然后,逻辑很简单:找到search.facets
对象,然后delete obj['source']
第一步,将路径
分为初始路径和尾随属性名称:
let keys = path.split('.');
let prop = keys.pop();
在对象中查找facets
对象:
let parent = keys.reduce((obj, key) => obj[key], jsonObj);
删除属性:
delete parent[prop];
我找到了另一个解决办法,很简单
var jsonKey = 'search.facets.source';
eval('delete jsonObj.' + jsonKey + ';');
“动态”到底是什么意思?动态基于什么?您希望将什么输入转化为删除操作?动态意味着,我想要一个函数,该函数将在删除密钥后返回json,无论我将密钥和jsonObj传递给该函数,您能否提供一个完整的函数。请不要使用
eval
。曾经正确地做这件事并没有那么复杂。