如何在ejs中将2d数组从JavaScript传递到脚本标记?

如何在ejs中将2d数组从JavaScript传递到脚本标记?,javascript,arrays,node.js,multidimensional-array,ejs,Javascript,Arrays,Node.js,Multidimensional Array,Ejs,我试图将一个2d数组的假值从项目的index.js文件传递到ejs文件的脚本部分 index.js app.get('/nextpage',(req,res)=>{ var arr = function I have to make a 2d array ;) res.render('pages/nextpage.ejs',{ arr: arr }); }); <script src='https://code.jquery.com/jque

我试图将一个2d数组的假值从项目的index.js文件传递到ejs文件的脚本部分

index.js

app.get('/nextpage',(req,res)=>{
    var arr = function I have to make a 2d array ;)
    res.render('pages/nextpage.ejs',{
        arr: arr
    });
});
<script src='https://code.jquery.com/jquery-2.1.3.min.js'></script>

    <div id = "script" arr= "<%=arr%>" ></div>
    <script>

        function renderBlock(){
             var arr = document.getElementById("script").getAttribute('arr');
             console.log(arr.length);
             $("#blockView").empty();
             for (var i=0; i <  arr.length;i++){
                for (var j=0; j <  arr[0].length;i++){
                    $('#blockView').append('<button>'+arr[i][j]+'</button');
                }
             }
         }
         renderBlock();

     </script>
基于其他人相关帖子中的一些堆栈答案,我在ejs文件中尝试了以下实现:

nextpage.ejs

app.get('/nextpage',(req,res)=>{
    var arr = function I have to make a 2d array ;)
    res.render('pages/nextpage.ejs',{
        arr: arr
    });
});
<script src='https://code.jquery.com/jquery-2.1.3.min.js'></script>

    <div id = "script" arr= "<%=arr%>" ></div>
    <script>

        function renderBlock(){
             var arr = document.getElementById("script").getAttribute('arr');
             console.log(arr.length);
             $("#blockView").empty();
             for (var i=0; i <  arr.length;i++){
                for (var j=0; j <  arr[0].length;i++){
                    $('#blockView').append('<button>'+arr[i][j]+'</button');
                }
             }
         }
         renderBlock();

     </script>

函数renderBlock(){
var arr=document.getElementById(“脚本”).getAttribute(“arr”);
控制台日志(arr.length);
$(“#块视图”).empty();
对于(变量i=0;i$('#blockView').append('+arr[i][j]+'如果您将数据从后端传递到前端,则必须正确地将其序列化,通常为JSON:

 "<%=JSON.stringify(arr)%>"
// ->
var arr = JSON.parse( document.getElementById("script").getAttribute('arr'));
“”
// ->
var arr=JSON.parse(document.getElementById(“脚本”).getAttribute(“arr”));
但这太难看了。为什么不直接用EJS生成按钮呢

<% for(const sub of arr) { %>
  <% for(const el of sub) { %>
    <button> <%= el %> </button>
  <% } %>
<% } %>


data arr=”“
var arr=document.getElementById(“脚本”).dataset.arr;
将数组直接放入脚本中,而不是元素的属性。您的第一个解决方案肯定有效!我正在尝试将每个按钮放入其自己的自定义查询中,它们在数组中的位置决定了它们的查询内容。谢谢!!!!!