【问题标题】:How can I loop through numbered variables in javascript [duplicate]如何循环遍历javascript中的编号变量[重复]
【发布时间】:2013-05-25 15:18:18
【问题描述】:

我有从 JQuery .ajax 函数作为数组返回的数据。

现在该数组中的字段已命名和编号,即 part1、part2、part3 等。

下面有一些我认为可能会循环的代码,但它返回 NaN。

for (var a = 1; a <= 9; a++) {
newtext += '<div class="part">' + (exploded[0].part + a) + '</div>';
}

我无法让任何建议起作用,所以我改为这样做。

var h = new Array();
h[1] = exploded[0].part_1;
h[2] = exploded[0].part_2;
h[3] = exploded[0].part_3;
h[4] = exploded[0].part_4;
h[5] = exploded[0].part_5;
h[6] = exploded[0].part_6;
h[7] = exploded[0].part_7;
h[8] = exploded[0].part_8;
h[9] = exploded[0].part_9;

我知道这有点啰嗦,但是当我处理多首歌曲时,我也可以使用数组键将它们全部循环。

【问题讨论】:

  • [0] 更改为[a]
  • @Broxzier — 问题是这些属性被称为 part1 等。那是行不通的。
  • 对不起,我可能解释得不太对。需要遍历的是字段名(part1 - 9),而不是数组本身。
  • @Quentin 抱歉,刚刚更正了。
  • 您最好以数组的形式从您的 ajax 调用返回数据,而不是一组末尾附加数字的变量。 XML 和 JSON 都支持。

标签: javascript jquery html ajax


【解决方案1】:

您可以像这样迭代/循环数组的项目。您应该使用数组变量的属性“长度”,它告诉数组有多少项......

var myStringArray = ["part1", "part2", "part3"];
for (var i = 0; i < myStringArray.length; i++) {
    alert(myStringArray[i]);
    //Do something
}

【讨论】:

  • 不,这不是我要遍历的数组,而是数组的字段。
【解决方案2】:

确保你的爆炸数组有 10 个元素,因为数组的索引从零开始,所以对于 9 个元素,你可以像这样编写代码

   for (var a = 0; a <= exploded.length; a++) {
        newtext += '<div class="part">' + (exploded[a].part + a) + '</div>';
        }
    alert(newtext);

修改响应以动态访问属性 ---------

    var newtext='';
            alert('hi');
    var exploded= {"title":"Cornerstone","firstline":"","keysignature":"C","copyright":"","part_1":"sandeep","part_2":"","part_3":"","part_4":"","part_5":"","part_6":"","part_7":"","part_8":"","part_9":"","ref":"2"};
    var prop='';
    var newhtml='';

    for (var a = 1; a <= 9; a++) {
        prop='part_' + a;

        newhtml+='<div class="part">' + (exploded[prop]) + '</div>';
    }
    alert(newhtml);

【讨论】:

  • 不,这不是正确的答案。数组中的数字不是问题。我知道我的数据库有 part1 到 part9 的字段。
  • 但是索引可能是问题所在。您正在使用从 1 到 9 的循环,对于具有 9 个元素的数组,该循环应为 0 到 8。
  • 不,它不是一个数组的 9 个元素。它是一个数组的 1 个元素的 9 个字段。
  • 所以根据我现在的理解,您正在尝试动态访问 json 对象的属性。为了检查这一点,我正在修改我的回复。希望这会奏效。
【解决方案3】:

试试这个方法:

for (var a = 1; a <= 9; a++) {
    newtext += '<div class="part">' + (exploded[0]['part_' + a]) + '</div>';
}

【讨论】:

  • 返回未定义。我猜这不是它循环的字段。
  • 您能举一个数组的例子吗?是这样的:[{ part1: 'part1', part2: 'part2'},{ part1: 'part1', part2: 'part2'}] 还是 {0:{ part1: 'part1', part2: 'part2'},1:{ part1: 'part1', part2: 'part2'}}
  • 尼克斯是对的。他需要更多细节。
  • 这是JSON解析前的输出"[{"title":"Cornerstone","firstline":"","keysignature":"C","copyright":""," part_1":"","part_2":"","part_3":"","part_4":"","part_5":"","part_6":"","part_7":"","part_8 ":"","part_9":"","re​​f":"2"}]"
  • 我的解决方案似乎运行良好。这是小提琴:jsfiddle.net/up8UZ
【解决方案4】:

下面的呢:

var array=["part1", "part2", "part3"];
html=array.map(function(o){ return '<div class="part">'+o+'</div>' }).join("")
console.log(html);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2Fmap

【讨论】:

  • 由于某种原因无法正常工作。
  • 你用的是什么浏览器? jsfiddle.net/ZHBHE
猜你喜欢
  • 1970-01-01
  • 2016-01-14
  • 2019-01-07
  • 2018-05-26
  • 2013-03-03
  • 2016-07-08
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
相关资源
最近更新 更多