json数据如下: { “R001” : { “A” : false, “B” : false },“R002” : { “A” : false, “B” : true },…}
我需要的结果是 R002以及R002中的B,其他的都不需要。请问大神怎么处理?不要理论,只要干货。谢谢 为什么只要B呢,因为B=true,也就是,只要有true的就取出来。 只要value=true的全部提取出来。
var data = { “R001” : { “A” : false, “B” : false },“R002” : { “A” : false, “B” : true },…};
var r2 = data.R002; var r2b = data.R002.B;
var result = []; for(var k in data){ result[result.length] = data[k].B; }
@russj 你这个好像。。。,为什么只要B呢,因为B=true,也就是,只要有true的就取出来。
@chloe 额,不好意思。应该是只要等于true的值和他的上一级key
求大神来袭啊。
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);
LZ的问题是啥呢?是不会写呢?还是自己写了一个觉得效率不够高?
@yeaha 其实呢,中间还是涉及很多东西,主要是桌面跟互联网端交互。
@zhou-yg 多谢回复。谢谢。已经搞定。
@think2011 多谢,已经搞定。