【问题标题】:Looping over javascript object looking for key and value - not getting results correctly循环遍历 javascript 对象以查找键和值 - 无法正确获得结果
【发布时间】:2017-07-23 18:48:43
【问题描述】:

我的数据是这样的

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) {

            }

        }
    }
}

【问题讨论】:

  • “它不正确”——这是一个非常模糊的问题陈述。你的意思是“什么都没有输出”?由于您没有任何代码可以解决任何问题,这不足为奇。
  • if(obj.directive["9"]) alert("heureka");

标签: javascript arrays json node.js object


【解决方案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]);
        });
    }
});

【讨论】:

    【解决方案2】:
    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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

      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;
          }
        }
      }
      

      【讨论】:

        【解决方案4】:

        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
             }
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-26
          • 2017-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多