json数据如下: { “R001” : { “A” : false, “B” : false },"R002" : { “A” : false, “B” : true },…}
我需要的结果是 R002以及R002中的B,其他的都不需要。请问大神怎么处理?不要理论,只要干货。谢谢 为什么只要B呢,因为B=true,也就是,只要有true的就取出来。 只要value=true的全部提取出来。
12 回复
var data = { “R001” : { “A” : false, “B” : false },"R002" : { “A” : false, “B” : true },…};
var r2 = data.R002; var r2b = data.R002.B;
var data = {"R001":{"A":false,"B":false},"R002":{"A":false,"B":true}};
var getTrue = function (obj) {
var results = [];
// 每一次呢,都把自己的子对象丢进去再检测一遍,没有就停了。
(function(obj){
for(var k in obj) {
if(obj[k] === true) {
results.push(obj);
}
// 重新调用了自己
arguments.callee(obj[k]);
}
})(obj);
return results;
}
var results = getTrue(data);
我写了一个,不知道符不符合你的需求。
keys = []
getTrue = (_obj,_objname)->
for k,v of _obj
if k is 'B' and v is true
keys.push _objname
if typeof v is 'object'
getTrue v,k
感觉差不多,测试用例
obj =
r1:
r11:
A:false
B:true
r12:true
r2:
A:false
B:
r3:
A:false
B:true
r4:
A:false
B:true
getTrue obj,'obj'
console.log keys
//输出
//[ 'r11', 'r3', 'r4' ]
LZ的意思是pick出value为true的key以及其父key吧? 应该跟AB一点关系都没有吧?
http://jsfiddle.net/abruzzi/ztdyhxdq/6/
var x = {R1: {A: false, B: true}, R2: {A: true, B: false}, R3: {A: true, B: false, C: true}};
var result = [];
var pick = function (origin, parent) {
var current = [];
for (var k in origin) {
if (origin[k] === true) current.push(k);
if (typeof origin[k] === 'object') pick(origin[k], k);
}
if (current.length > 0) result[parent] = current;
}
pick(x, null) || console.log(result);