Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取JSON解析对象中的所有键/数组键?_Javascript_Angular_Lodash - Fatal编程技术网

Javascript 获取JSON解析对象中的所有键/数组键?

Javascript 获取JSON解析对象中的所有键/数组键?,javascript,angular,lodash,Javascript,Angular,Lodash,我有这样的JSON示例 `{ values:[{ "name": "Base Url", "url": "https://kubemanagement-prod.kohls.com" }, { "name": "Base Url newwww", "url": "https://batman.com" }] }` 目前,当我将这个特殊的JSON添加到lodash\uu0.keys中时,我得到的结果是[“0”,“1”],它基本上是第一个和第二个对象

我有这样的JSON示例

`{
  values:[{
    "name": "Base Url",
    "url": "https://kubemanagement-prod.kohls.com"
  },
  {
    "name": "Base Url newwww",
    "url": "https://batman.com"
  }]
}`
目前,当我将这个特殊的JSON添加到lodash
\uu0.keys
中时,我得到的结果是
[“0”,“1”]
,它基本上是第一个和第二个对象
0
1
的索引

我真正想要的是检索JSON对象的所有键,包括子对象属性。在这种情况下,
[“值”、“0”、“1”、“名称”、“url”]

是否有人知道一种lodash方法或机制可以将复杂JSON对象中给定的所有键检索到第n级


语言:Angular+Typescript

此函数递归地从对象树中获取键,使用
.keys()
.flatMap()
.union()
组合键列表,并仅获取唯一值:

const getAllKeys=obj=>\uu.union(
_.钥匙(obj),
_.flatMap(对象,o=>u.isObject(o)?getAllKeys(o):[])
)
常量arr={“值”:[{“名称”:“基本Url”,“Url”:”https://kubemanagement-prod.kohls.com},{“名称”:“基本Url新建www”,“Url”:https://batman.com"}]}
const result=getAllKeys(arr)
console.log(结果)

您不需要使用lodash来创建此对象,
对象。键
就足够了。您只需编写一个递归函数,写入
集合
,完成后可能会转换为数组:

const数组=[
{
“名称”:“基本Url”,
“url”:”https://kubemanagement-prod.kohls.com"
},
{
“名称”:“基本Url newwww”,
“url”:”https://batman.com"
}
];
函数addAll(集合、条目){
for(条目的常量输入){
set.add(条目);
}
返回集;
}
函数allKeys(obj/*:object | array*/,keys/*:Set*/=new Set()){
addAll(keys,Object.keys(obj));
for(对象值的常量输入(obj)){
if(条目和类型条目==“对象”){
所有钥匙(入口、钥匙);
}
}
返回键;
}
log([…所有键(数组)])怎么样

const arr={“values”:[{“name”:“Base Url”,“Url”:”https://kubemanagement-prod.kohls.com},{“名称”:“基本Url新建www”,“Url”:https://batman.com"}]}
让result1=Object.keys(arr)//获取对象键,即“值”
设result2=Object.keys(arr[result1]);//在此处获取对象名称“0,1”的键
设result3=Object.keys(arr[result1][0]);//在此处获取一个对象“名称和url”的属性名称
让resutlant=result1.concat(result2,result3)/“合并数组”

console.log(resutlant)
如果使用typescript,为什么不使用或Object.values来执行此操作

您需要添加到tsconfig的下一行:

库:[ ...... “es2018”,
]

JSON是用于数据交换的文本表示法。如果您处理的是JavaScript源代码,而不是字符串,那么就不是JSON。您拥有的不是一个“JSON对象”,而是一个数组。请检查现在编辑的更有意义的方式。的可能副本没有任何区别(仍然不是JSON)。:-)看起来编辑修复了我提出的问题,很好!此解决方案是否适用于任何具有复杂结构的动态JSON对象?可以在偶数中包含数组。这两种解决方案都处理对象和数组的动态结构。很抱歉,它的融合效果很好。。我不小心放了半氯。。。谢谢你的回答。。标记为正确答案。当然。添加了另一个没有索引的答案。