【问题标题】:How to make a foreach of an object in javascript?如何在javascript中创建一个对象的foreach?
【发布时间】:2017-12-11 19:41:11
【问题描述】:

我目前正在使用 JavaScript 和 jQuery 在 Qlik Sense 中构建混搭。我进行了一些数据选择,并将它们放入变量对象中:

var CurrentSelec = app1.selectionState().selections;
console.log(CurrentSelec);`
console.log(typeof CurrentSelec);

这是我在浏览器控制台上看到的:

我正在尝试在 Foreach 中显示 qSelected 值:

我已经尝试过使用 Javascript:

for(var index in CurrentSelec) { 
    console.log(index.qSelected);
}

我已经尝试过使用 jQuery:

$.each(CurrentSelec, function(i, index) {
  console.log(index.qSelected)
});

但是我的浏览器控制台没有显示我的 foreach 的日志。

您知道如何正确地制作对象的 foreach 并在浏览器控制台上显示其内容吗?

问候。

【问题讨论】:

  • CurrentSelec 不是一个对象,它是一个数组。如果它是一个对象,图像的第一行会显示 Object 而不是 Array(1)typeof CurrentSelect 会输出 Object {} 而不是 object

标签: javascript jquery foreach qliksense mashup


【解决方案1】:

您可以使用 Object.keys() 方法,该方法返回对象中键的数组。然后我们通过 Array.forEach() 方法运行它。例如

Object.keys(lunch).forEach(function (item) {
    console.log(item); // key
    console.log(lunch[item]); // value
});

【讨论】:

    【解决方案2】:

    var displayArray = [{id:1,dispName:"abc"},{id:2,dispName:"aaaa"},{id:3,dispName:"bbbb"},{id:4,dispName:"xxxxx"},{id:5,dispName:"www"}]
          displayArray.forEach(obj => {
          console.log(obj)
          });

    【讨论】:

      【解决方案3】:

      您似乎混淆了数组和对象。 查看您提供的图片,我认为您有一个包含对象的数组。

      //Naming indicates mutliple selections
      app1.selectionState().selections; 
      

      循环遍历数组很容易,也可以访问对象值:

      // CurrentSelec = [{qSelected : '1'},{qSelected : '2'}];
      CurrentSelec.forEach ( selection => console.log(selection.qSelected) );
      

      【讨论】:

        【解决方案4】:

        你可以像这样使用jQuery,

        $.each(CurrentSelec, function( key, value ) {
           alert( key + ": " + value );
        });
        

        我相信它会有所帮助,

        【讨论】:

          【解决方案5】:

          在您的 JavaScript 示例中,您错误地浏览了对象。为了通过它,请使用[] 和您设置的变量。例如,

          for (var index in CurrentSelec) {
            console.log(CurrentSelec[index].qSelected);
          }
          

          这会选择CurrentSelec 中的每个子元素并打印出其对应的qSelected 值。

          在您的示例中,当您说for (var index in CurrentSelec) {...}; 时,您是在说对于CurrentSelec 中的每个孩子,设置index = child(其中孩子只是您的CurrentSelec 对象的键),然后继续 for 循环。

          因此,当您说console.log(index.qSelected) 时,您正在尝试导航到index 下的qSelected 值,该值永远不会存在。相反,您应该使用在 for 循环中收到的每个 index 浏览 parent 对象。

          【讨论】:

          【解决方案6】:

          此处缺少某些信息(请重命名为 'currentSelec),但请执行以下操作:

          CurrentSelec.forEach(function(item){
                   console.log(item.qSelected)
              })
          

          您所做的是迭代数组的键,而不是值。

          【讨论】:

            【解决方案7】:
            for (var index in CurrentSelec[0]) {
             console.log(index.qSelected);
            }
            

            试试这个

            【讨论】:

            • 考虑为您的答案添加更多内容。只是给 OP 一个代码来替代并不能解释太多。
            【解决方案8】:

            尝试使用下面的代码,看看它是否有效,而不是 CurrentSelec 使用 CurrentSelec[0]

            $.each(CurrentSelec[0], function(i, index) {
              console.log(index.qSelected)
            });
            

            【讨论】:

              【解决方案9】:

              你的 CurrentSelec 变量是一个数组,不是一个普通的对象,所以只需使用它的forEach 方法:

              CurrentSelec.forEach(function (el) {
                  console.log(el.qSelected);
              });
              

              【讨论】:

                【解决方案10】:

                您使用 javascript for in 循环迭代对象。

                例如CurrentSelec 是你的对象。

                for(key in CurrentSelec){
                    //key is your object's main query.
                    //CurrentSelec is your object's nested array if has.
                    console.log(key);
                    console.log(CurrentSelec[key]);
                }
                
                猜你喜欢
                • 2020-10-08
                • 2014-05-12
                • 1970-01-01
                • 2011-03-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多