将ejs中的键值数组与组合选定的值进行比较

我有一个路线js我定义得到像这样的function:

exports.get = function (req, res) { var calls = [{ propertyTypes: function (acc) { return '/catalog/propertyTypes/'; }, }]; commercial_residential = { 1 : 'Residencial', 2 : 'Comercial' } property_types = [ [ [4 , "departamento"], [5 , "campo"], [8 , "casa"], [13 , "duplex"], [43 , "casa"], [47 , "departamento"], [49 , "campo"], [50 , "Terreno"], [53 , "departamento"], [63 , "ph"] ],[ [1 , "Local"], [2 , "Quinta"], [3 , "Cochera"], [4 , "Galpon"], [5 , "emprendimiento"], [6 , "Lote"], [7 , "Oficina"], [9 , "Fondo de Comercio"], [10 , "Galpon"], [12 , "fondo de comercio"], [13 , "fondo de comercio"], [79 , "fondo de comercio"] ] ] fetcher.getWithDependencies(calls, function (err, results) { var propertyTypes = (results.propertyTypes) ? results.propertyTypes : []; []; fetcher.get('/ilist/importer/get/property/' + id, function (e, results) { res.render('ilist-importer/property', { 'data': results, 'list': { 'propertyQR': propertyTypes, 'propertyTypes': property_types, } }); }); }) }; 

在我的这个获得函数的forms,在ejs文件中,我有一个组合显示所有property_types名称。 当表单提交时,我需要将选定的值property_type名称与来自route.js的键值数组propertyQR进行比较。 这是我的表格select:

  <select name="comercial" id="comercial_form" class="span3"> <option value="0">-Seleccione-</option> <% for(var i=0; i < list.propertyTypes[1].length; i++) { %> <option value="<%= list.propertyTypes[1][i][1] %>"> <%= list.propertyTypes[1][i][1] %> </option> <% } %> </select> 

这是我迄今为止。 首先,我尝试将从Route.js中获取的PropertyQR数组复制到一个新的数组PropertyTypeID中,然后当表单提交时,我将表单中的选定值与创build的键值数组名字段进行比较,如果匹配,则获取id字段。

  <script> $(function () { var propertyTypeID = []; for(var i=0; i< <%= list.propertyQR.length%>; i++){ propertyTypeID.id.push(<%= list.propertyQR[i].id %>) propertyTypeID.name.push(<%= list.propertyQR[i].name %>) }; $('#submit-import-form').click(function(){ for(var i=0; i < propertyTypeID.length; i++){ if (tipoPropiedad==propertyTypeID[i].name) propertyTID=propertyTypeId[i].id; } } }); </script> 

现在,当我尝试加载我得到的forms:

Uncaught TypeError:无法读取未定义的属性'push'

为什么发生这种情况? 请帮忙!!!!!

请记住,EJS代码正在服务器上运行,并生成客户端JavaScript代码,该代码完全独立运行,而无需了解EJS环境。 您可以通过查看返回给浏览器的内容来查看EJS生成的内容。

这段代码有几个问题:

 var propertyTypeID = []; for(var i=0; i < <%= list.propertyQR.length%>; i++){ propertyTypeID.id.push(<%= list.propertyQR[i].id %>) propertyTypeID.name.push(<%= list.propertyQR[i].name %>) }; 

propertyTypeID是一个数组,它没有idname属性,所以它们将是undefined 。 此外,variablesi是在客户机中定义的,而不是在服务器端EJS中定义的,因此像<%= list.propertyQR[i].id %>这样的代码将无法访问在其上面声明的i的值。 通常这会抛出一个错误,因为i没有声明,但你也在你的第二个代码示例中声明一个名为i的服务器端variables,我猜这是i在这里使用的。

我认为你想要做的是这样的:

 var propertyTypeID = []; <% list.propertyQR.forEach(function(property) { %> propertyTypeID.push({ id: <%- JSON.stringify(property.id) %>, name: <%- JSON.stringify(property.name) %> }); <% }); %> 

这个循环是否有必要,我不确定。 您可能只能使用var propertyTypeID = <%- JSON.stringify(list.propertyQR) %> 。 这取决于你想要做什么。

还有其他问题,例如propertyTypeID,length的逗号propertyTypeID,length