如何在数组中显示数组项

时间:2015-03-23 21:13:40

标签: javascript arrays node.js ejs

在前端使用Nodejs和ejs我发送了一个数组,里面有数组。然而,当我循环并进入数组时,我输出的是每个数组中的第一项,而不是数组数组中的所有项。我的问题是如何显示所有这些帖子?控制台日志显示所有帖子只是一个如何提取它们的问题。

下面是我的虚拟数据阵列,下面是前端的示例,任何帮助都将不胜感激。

[ 
    [ 
        { 
            post_created_by: 'supervalue',
            post_created_by_id: 54ecb20852ea734c0598c47b,
            title: 'salmon',
            desc: '3 for 2 fresh sea salmon',
            _id: 5501b88c68e8b5842ece6eb0 
        },
        { 
            post_created_by: 'supervalue',
            post_created_by_id: 54ecb20852ea734c0598c47b,
            title: 'Milkshake',
            desc: 'Avonmore fresh strawberry milkshake 6 pack',
            _id: 5501b8fd68e8b5842ece6eb1 
         } 
    ],
    [ 
        { 
            post_created_by: 'maxol',
            post_created_by_id: 54ecb2cd52ea734c0598c47e,
            title: 'petrol',
            _id: 5501bb9168e8b5842ece6eb6 
        },
        { 
           post_created_by: 'maxol',
           post_created_by_id: 54ecb2cd52ea734c0598c47e,
           title: 'tayto',
           desc: '20 packs for the price of 12',
           _id: 5501bbb168e8b5842ece6eb7 
        } 
    ],
    [ 
        { 
            post_created_by: 'Burkes Shoes',
            post_created_by_id: 5502033d3d108e141dd01e8c,
            title: 'boots',
            desc: 'soccer boots size 5',
            _id: 5502036a3d108e141dd01e8d 
        } 
    ]
]


<% for (var i = 0; i < posts.length; i++) { %>
    <div class="col-xs-8">
        <a href="/busProfileFromUser?busId=<%= posts[i][0].post_created_by_id %>">
            <h5><%= posts[i][0].post_created_by %></h5>
        </a>
    </div>

2 个答案:

答案 0 :(得分:2)

您的代码遍历外部数组,但它只查看内部数组的第一个元素(索引0处的元素)。您需要依次遍历每个阵列;嵌套的for循环是最简单的解决方案:

for (var i = 0; i < array.length; i++) {
  for (var j = 0; j < array[i].length; j++) {
    // do something with the element at array[i][j]
  }
}

答案 1 :(得分:0)

您可以使用简单的递归展平函数将整个数组数组展平为单个数组,如下所示:

var flattenArray = function(arr) {
    var i,
        l = arr.length,
        flatten = [],
        element,
        __push = [].push
     ;

    for(i = 0 ; i < l ; i++) {
        element = arr[i];

        if(element.constructor === Array) {
            __push.apply(flatten, flattenArray(element));
        } else {
            __push.call(flatten, element);
        }
    }

    return flatten;
};

posts = flattenArray(posts);

然后,使用一个简单的for循环迭代该数组

<% for (var i = 0; i < posts.length; i++) { %>
    <div class="col-xs-8">
        <a href="/busProfileFromUser?busId=<%= posts[i].post_created_by_id %>">
            <h5><%= posts[i].post_created_by %></h5>
        </a>
   </div>
 <% } %>