7

可能重复:
循环遍历 JavaScript 中的数组

我想在javascript中制作相当于php的foreach。因为我并不真正了解 Javascript 语言,所以我希望有人将这段 PHP 代码重写为 Javascript 代码:

$my_array = array(2 => 'Mike', 4 => 'Peter', 7 => 'Sam', 10 => 'Michael');

foreach($my_array as $id => $name)
{
     echo $id . ' = ' . $name;
}

这甚至可以用 Javascript 语言来实现吗?

4

4 回答 4

18

最接近的构造是

a = { 2: 'Mike', 4: 'Peter', 7: 'Sam', 10: 'Michael' };
for(var n in a) {
    console.log(n+'='+a[n]);
}
于 2012-09-14T17:57:37.750 回答
9

在 JQuery 中,$.each功能类似。

它允许您使用可以访问每个项目的回调函数来迭代数组:

var arr = ["one", "two", "three", "four", "five"];
$.each(arr, function(index, value) {
  // work with value
});

对于纯 Javascript?

for (var key in obj) {
    alert(key + ': ' + obj[key]);
}
于 2012-09-14T17:58:42.553 回答
4

因为你存在两种方式。

首先是数据在对象中(例如它在 my_list 中),其次是数据正好在数组中(例如它是 my_array)

在任何情况下,您都可以使用 JavaScript For...In 语句

例子:

<script type="text/javascript" charset="utf-8">
    var data;
    var my_list  = {2:'Mike', 4:'Peter', 7:'Sam', 10:'Michael'};
    var my_array = new Array();
    my_array[2]  = 'Mike';
    my_array[4]  = 'Peter';
    my_array[7]  = 'Sam'; 
    my_array[10] = 'Michael';

    data = '';
    for(index in my_list) {
        data += (index+'='+my_list[index]+"\n");
    }
    console.log(data);

    data = '';
    for(index in my_array) {
        data += (index+'='+my_array[index]+"\n");
    }
    console.log(data);
</script>

在这两种情况下,控制台输出将是:

2=Mike
4=Peter
7=Sam
10=Michael

其实请阅读http://www.w3schools.com/js/js_loop_for_in.asp

于 2012-09-14T18:09:05.200 回答
2

见下面网址

foreach 相当于 jquery 中的 php?

或者试试

如果你想迭代一个对象,我会推荐 JavaScript 变体:

for (var key in obj) {
    alert(key + ': ' + obj[key]);
}

你也可以像这样在 jQuery 中迭代对象:注意!除非您认为这种语法更易于维护,否则这样做毫无意义。下面的语法比上面的标准 JavaScript for-loop 有更多的开销。

$.each(obj, function (key, value) {
    alert(key + ': ' + value);
});

要迭代数组,您可以在标准 JavaScript 中这样做(假设 arr 是数组):

for (var i = 0, l = arr.length; i < l; i++) {
    alert(i + ': ' + arr[i]);
}

要在 jQuery 中执行此操作,您可以这样做:

$.each(arr, function (index, value) {
    alert(index + ': ' + value);
});
于 2012-09-14T18:03:48.677 回答