通过JSON中的Key查找值
Finding values by Key in JSON
给定一个任意结构和混合值类型的反序列化JSON对象。。。
var data = {
'a':'A1',
'b':'B1',
'c': [
{'a':'A2', 'b':true},
{'a':'A3', 'b': [1, 2, 3]}
]};
我想返回一个与给定键匹配的值数组。
> my_func(data, 'a')
['A1', 'A2', 'A3']
> my_func(data, 'b')
['B1', true, [1, 2, 3]]
我得到的最接近的是这个,它给出了正确的结果,但我认为有一个更好(更快/更整洁/更高效)的解决方案。
my_func = function(o,s,a){
var a = a || [];
if(o == null){
return a;
}
if(s in o){
a.push(o[s]);
}
for(e in o){
if(typeof(o[e]) == "object"){
a.concat(my_func(o[e], s, a))
}
}
return a;
}
有什么想法吗?
function traverse(obj,func, parent) {
for (i in obj){
func.apply(this,[i,obj[i],parent]);
if (obj[i] instanceof Object && !(obj[i] instanceof Array)) {
traverse(obj[i],func, i);
}
}
}
function getPropertyRecursive(obj, property){
var acc = [];
traverse(obj, function(key, value, parent){
if(key === property){
acc.push({parent: parent, value: value});
}
});
return acc;
}
像这样称呼这个
getPropertyRecursive( myobj, 'test' )
其中myobj
是嵌套对象,test
是关键
您可以利用replacer
参数到JSON.stringify
:
function my_func(data, prop) {
var result = [];
JSON.stringify(data, function(key, val) {
if (key === prop) result.push(val);
return val;
});
return result;
}
感谢大家的投入。你激发了我对以下解决方案的灵感,我对此感到非常高兴。
walk_obj = function(o, fn){
for(k in o){
fn(k, o[k]);
if(typeof(o[k]) == "object"){
walk_obj(o[k], fn);
}
}
}
get_by_key = function(o, key){
var a = [];
walk_obj(o, function(k,v){
if(k==key){
a.push(v);
}
})
return a;
}
相关文章:
- 正在全局范围中查找JavaScript函数
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- es6 相当于下划线查找位置
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 如何在不传递此信息的情况下查找被调用的元素
- Lodash 从值数组中查找数组中的值
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 使用RegExp查找url中的字符
- 查找元素高度,包括边距
- 使用JS查找数组的平均值
- 查找最短和最长日期
- 猫鼬在特定记录中查找嵌套记录
- 使用javascript在MVC中查找网格长度时出错
- 在Javascript数组中查找绝对最大值
- 在javascript中查找单词
- JavaScript 在数组中查找缺少的数字
- 使用key元素在json对象中查找值对
- 通过JSON中的Key查找值