循环查找关键字和值的javascript对象 - 无法正确获取结果

时间:2017-07-23 10:20:08

标签: javascript arrays json node.js object

我的数据看起来像这样

var obj = { QuestionId: 97,
   SortOrder: { '9': '1' },
   directive: { '1': false, '2': false, '9': true },
   data: { '1': '', '2': '', '9': 'adfaf' } 
}

在循环中,我想检查指令键是否具有值

预期打印

directive key 9 : true
SortOrder key 9 " 1
data key 9 = 'adfaf'

请注意9是我唯一关心的。

我意识到SortOrder只有1个键/值对 - 我不知道为什么会这样,但这将是我正在处理的常见问题。

我正在尝试单循环,但接着是这样的嵌套循环,但它不正确

for (var d in obj) {
    if (d === "directive") {
        for (var prop in obj[d]) {

            if (obj[d][prop] == true) {

            }

        }
    }
}

4 个答案:

答案 0 :(得分:1)

你可以迭代obj.directive的键,如果值是真的,那么打印其他属性的值。

var obj = { QuestionId: 97, SortOrder: { 9: '1' }, directive: { 1: false, 2: false, 9: true }, data: { 1: '', 2: '', 9: 'adfaf' } };

Object.keys(obj.directive).forEach(function (k) {
    if (obj.directive[k]) {
        ['directive', 'SortOrder', 'data'].forEach(function (kk) {
            console.log(kk + ' key ' + k + ': ' + obj[kk][k]);
        });
    }
});

答案 1 :(得分:1)

var obj = { QuestionId: 97,
            SortOrder: { '9': '1' },
            directive: { '1': false, '2': false, '9': true },
            data: { '1': '', '2': '', '9': 'adfaf' } 
          };

if(obj.hasOwnProperty('directive'))
{
    var sortResult = {};
    var dataResult = {};
    var dirResult = Object.keys(obj['directive'])[Object.values(obj['directive']).indexOf(true)];

    if(dirResult){
       sortResult[dirResult] = obj['SortOrder'][dirResult];
       dataResult[dirResult] = obj['data'][dirResult];

       console.log('directive result', dirResult);
       console.log('sortOrder result', sortResult);
       console.log('dara result', dataResult);
    }
}

答案 2 :(得分:0)

obj.directive。你已经有了这个 { '1': false, '2': false, '9': true } 因此if(obj.directive['9'])将为您提供true

如果你想进行迭代

var x =obj.directive
for (var key in x) {
  if (x.hasOwnProperty(key)) {

     if(x[key])
     {
        //do anything
     }
  }
}

答案 3 :(得分:0)

试试这个

var obj = { QuestionId: 97,
   SortOrder: { '9': '1' },
   directive: { '1': false, '2': false, '9': true },
   data: { '1': '', '2': '', '9': 'adfaf' } 
}

if (obj && obj.directive) {
  for(x in obj.directive) {
    if (obj.directive[x] === true) {
      console.log('result:', x);
      break;
    }
  }
}