【问题标题】:jquery each not working propertly while looping throughjquery在循环时每个都不能正常工作
【发布时间】:2014-01-11 08:04:03
【问题描述】:

我无法弄清楚,为什么这段代码(仅限 js)没有运行 - http://jsfiddle.net/fLEAw/

populateList();
populateList: function () {
        var accData = [{ A: "A1" }, { B: "B1"}];

    $.each(accData, function (index) {
            alert(accData[index].Value)
        });

    }

【问题讨论】:

  • 您的对象没有Value 属性。实际上你的代码甚至没有到达那一行!
  • 在循环遍历时我可以做些什么来访问 accData 中的所有值?
  • @whyAto8:检查我的解决方案。它将提醒每个数组元素值。 :)
  • @BlackSheep - 谢谢,您的意见让我意识到代码出了什么问题以及我试图实现的目标。 Value 属性显然不存在,然后我意识到“A”和“B”不必不同,所以我在两者中都使用了“Name”并且它起作用了。这是我需要的工作代码的链接 - jsfiddle.net/fLEAw/19

标签: javascript jquery json loops each


【解决方案1】:

您的 javascript/jquery 代码有多个问题。看看这个

var populateList = function () {
    var accData = [{ A: "A1" }, { B: "B1"}];

    $.each(accData, function (index) {
        for(var value in accData[index]){
            alert(accData[index][value])
        }

    });

}

populateList();

我宁愿建议你自己纠正问题并在评论中提问。

http://jsfiddle.net/fLEAw/3/

【讨论】:

  • 我想访问 A1,B1 等值而不是索引。
  • 您提到的问题我了解的很少,感谢您指出。最后,在阅读了本文中的所有帖子后,我意识到在我的特定要求的情况下出了什么问题以及可以更改的内容,所以我做了这些并进行了工作。 - jsfiddle.net/fLEAw/19
【解决方案2】:

由于您的数组元素是对象,请尝试以下解决方案:

var populateList = function () {
  var accData = [{ A: "A1" }, { B: "B1"}];

  $.each(accData, function (index) {    
    for(var ele in accData[index]){
      alert(accData[index][ele]);
    }
  });

};
populateList();

Demo

【讨论】:

    【解决方案3】:

    改变

    populateList: function () {
    

    function populateList() {
    

    写:

    populateList();
    function populateList() {
        var accData = [{
            A: "A1"
        }, {
            B: "B1"
        }];
        var len = accData.length;
        for (var i = 0; i < len; i++) {
            $.each(accData[i], function (key, value){
                //key will return key like A,B and value will return values assigned
                alert(value)
            });
        }
    }
    

    Updated fiddle here.

    【讨论】:

      【解决方案4】:

      您可以使用$.each 循环数组对象:

      $.each(accData, function(i, obj) {    
        $.each(obj, function(k, value) {
          alert(value);
        });
      });
      

      我怀疑你最终会使用alert,你可能希望这些值对它们做一些事情,所以你可以把它们放在一个数组中。这是纯 JavaScript 中的另一种可重用方法:

      var values = function(obj) {
        var result = [];
        for (var i in obj) {
          result.push(obj[i]);
        }
        return result;
      };
      
      var flatten = function(xs) {
        return Array.prototype.concat.apply([], xs);
      };
      
      var result = flatten(accData.map(values));
      
      console.log(result); //=> ["A1", "B1"]
      

      【讨论】:

      • 非常感谢您对 $.each 的使用进行了澄清,这很清楚。但是,我根据我的具体要求做了一些更改并且它有效 - jsfiddle.net/fLEAw/19
      【解决方案5】:

      试试这样的

      var accData = [{ A: "A1" }, { B: "B1"}];
      $.each(accData, function (index,obj) {
        $.each(obj, function(key, value) {
          alert(key + '' + value);
        });
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-01
        • 2012-01-02
        • 2015-05-14
        • 2017-11-30
        • 1970-01-01
        相关资源
        最近更新 更多