如何在JS字符串变量中找到JS每个函数的输出(即javascript插值)

How to find output of JS each function within a JS string variable (i.e., javascript interpolation)

本文关键字:JS 输出 函数 javascript 插值 字符串 变量      更新时间:2023-09-26

对于上下文,gon.jbuilder是一个嵌套的JSON,表示lenders和它们的inventories之间的has_many关系。

gon.jbuilder = [
  {
     "name": "John Doe", 
     "age": 29,
     "inventories": [
        {"id": 1, "name": "nail"},
        {"id": 2, "name": "hammer"},
        ...
     ]
  },
  {
     "name": "Jane Smith", 
     "age": 31,
     "inventories": [
        {"id": 3, "name": "picture"},
        {"id": 4, "name": "frame"},
        ...
     ]
  }
]

我使用谷歌地图api为每个lender做一个标记,然后在每个lender的信息窗口中显示所有他/她的inventories。这需要一个each循环内的内容为信息窗口,我不知道怎么做。我需要这样写:

$.each( gon.jbuilder, function (counter, lender) { 
   // draw the marker for each lender
   // establish an info window for each lender
   // below per Google API docs should be the content that goes into the info window, not sure how to interpolate the each correctly
      var contentString = '<div id="content">'+
        '<div id="siteNotice">'+
        '</div>'+
        '<h1 id="firstHeading" class="firstHeading">'+ lender.name + '</h1>'+
        '<div id="bodyContent">'+
        '<ul>' +
        $.each( lender, function (counter, inventory) {
          '<li>' + inventory.name + '</li'>
        }; + 
        '</ul>' +
        '</div>'+
        '</div>';

谢谢!

$.each返回迭代过的对象,而不是交互函数返回的对象。另外,你的函数不返回任何东西——它执行一个连接,但不返回它。

您可以使用$.map,它以数组形式返回所有结果,然后使用.join将它们连接成字符串。

  var contentString = '<div id="content">'+
    '<div id="siteNotice">'+
    '</div>'+
    '<h1 id="firstHeading" class="firstHeading">'+ lender.name + '</h1>'+
    '<div id="bodyContent">'+
    '<ul>' +
    $.map( lender.inventories, function (inventory, counter) {
      return '<li>' + inventory.name + '</li>';
    }).join('') + 
    '</ul>' +
    '</div>'+
    '</div>';