我正在寻找类似Object.keys
的代码,但它适用于潜在的嵌套对象,也不应该包含具有对象/数组值的键(它只应该包含具有直接字符串/数字/布尔值的键)。
示例A
输入
{
"check_id":12345,
"check_name":"Name of HTTP check",
"check_type":"HTTP"
}
预期输出
[
"check_id",
"check_name",
"check_type"
]
Object.keys
适用于类似这样的平面情况,但不适用于嵌套情况:
实施例B
输入
{
"check_id":12345,
"check_name":"Name of HTTP check",
"check_type":"HTTP",
"tags":[
"example_tag"
],
"check_params":{
"basic_auth":false,
"params":[
"size"
],
"encryption": {
"enabled": true,
}
}
}
预期输出
[
"check_id",
"check_name",
"check_type",
"check_params.basic_auth",
"check_params.encryption.enabled"
]
注意,这不包括tags
、check_params
、check_params.params
或check_params.encryption
,因为这些值是数组/对象。
∮那个问题∮
有没有一个库可以做到这一点?你将如何实现它,使它可以与任何对象,大的和嵌套的,或小?
7条答案
按热度按时间q8l4jmvw1#
可以像这样使用reduce:
**Edit1:**适用于要包含数组的一般情况。
4si2a6ki2#
发电机能很快解决这种问题-
或者是一个纯粹的函数表达式来计算所有的键-
iih3973s3#
您可以检查键并进行迭代,否则将路径推送到结果集。
kg7wmglp4#
您可以使用
for...in
并创建递归函数。p1tboqfb5#
wswtfjt76#
进一步增强了上述建议,以返回包括数组在内的所有键。
预期产出:
nfeuvbwi7#
你是这个意思吗?
http://jsfiddle.net/robbiemilejczak/hfe12brb/1/
我不能用vanilla JS来做,这是一个依赖于lodash的非常笨拙的解决方案。基本上利用了lodash的
_.forIn
和_.isArray
函数来迭代一个对象。而且这只会深入一层,所以嵌套对象内部的对象将被忽略。尽管它确实产生了你预期的输出,所以我想说这是一个不错的起点。