使用 jQuery 动态创建对象

Posted

技术标签:

【中文标题】使用 jQuery 动态创建对象【英文标题】:Dynamically create object with jQuery 【发布时间】:2018-07-14 17:58:51 【问题描述】:

我想动态创建一个对象数组。

该数组将被称为“组”。它将包含未知数量的对象(这些是组名称),这些对象将由元素的ID 确定。每个对象将包含未知数量的属性(这些是组属性),这些属性将由 div 的内部文本确定,它们的值将由另一个 div 的内部文本确定。

我知道如何使用.each().attr('ID').text() 获取这些值。我只是不知道如何创建对象数组。

// Example html 
<div id="england">
    <div class="property">health</div>
    <div class="count">3</div>
    <div class="property">education</div>
    <div class="count">1</div>
    <div class="property">entertainment</div>
    <div class="count">12</div>
</div>
<div id="scotland">
    <div class="property">geography</div>
    <div class="count">5</div>
    <div class="property">history</div>
    <div class="count">2</div>
</div>
<div id="wales">
    <div class="property">illustration</div>
    <div class="count">4</div>
    <div class="property">business</div>
    <div class="count">6</div>
    <div class="property">fashion</div>
    <div class="count">3</div>
</div>

.

// Example JSON output of the 'groups' array
  
    "england":  
        "health":"3",
        "education":"1",
        "entertainment":"12"
    ,
    "scotland":  
        "geography":"5",
        "history":"2"
    ,
    "wales":  
        "illustration":"4",
        "business":"6",
        "fashion":"3"
    


【问题讨论】:

如果你想从 html 创建这个发布你的 html。 ...如果你想要js输出,你的输出应该是js。 我很快就会用一些示例 HTML 进行编辑。 您能否还展示一个对象数组的示例,因为上面看起来不像我知道的任何 javascript 数组.. 您可能想要初始化您的 Group 数组,然后您需要选择您需要的 HTML 内容。之后,您将需要使用一些数组方法以您希望在 Group 对象中的方式获取选定的 HTML 内容。请查看 .map() 、 .forEach() 、传播运算符等的文档以查看示例 【参考方案1】:

您可以使用reduce() 来返回对象,使用Array.from 将jQuery 对象转换为对象数组,这样您就可以使用reduce 方法。

// Select direct div children of body, make an array from them and use reduce on it
const data = Array.from($('body > div')).reduce(function(r, e) 
  // Add property for each div / object in array where key is id and value will be another object from array of children of current div 
  r.groups[e.id] = Array.from($(e).children())
    .reduce(function(acc, el, i, arr) 
      // Here we are looping each element in div and if (i % 2 == 0) that means its property so we will use it for key and the next one will be used for value
      if (i % 2 == 0) acc[el.textContent] = arr[i + 1].textContent
      // return accumulator
      return acc
    , )
  // return accumulator
  return r;
  // Accumulator of first reduce is object with groups property
, groups: )

console.log(data)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="england">
  <div class="property">health</div>
  <div class="count">3</div>
  <div class="property">education</div>
  <div class="count">1</div>
  <div class="property">entertainment</div>
  <div class="count">12</div>
</div>
<div id="scotland">
  <div class="property">geography</div>
  <div class="count">5</div>
  <div class="property">history</div>
  <div class="count">2</div>
</div>
<div id="wales">
  <div class="property">illustration</div>
  <div class="count">4</div>
  <div class="property">business</div>
  <div class="count">6</div>
  <div class="property">fashion</div>
  <div class="count">3</div>
</div>

【讨论】:

哇。谢谢 Nenad,这看起来很有效。那里有很多我不认识的(因此不理解)。您能否对每行的功能进行一些解释?那将不胜感激! 刚刚意识到我从来没有感谢你加入 cmets - 真的很感激 :)

以上是关于使用 jQuery 动态创建对象的主要内容,如果未能解决你的问题,请参考以下文章

DOM中动态创建元素与jQuery中动态创建元素

jQuery动态操作元素

将 jQuery 添加到动态 JS-DOM 对象

jquery 动态创建div并判断是每行的第几个

强烈求助!!JS 动态循环创建DIV

如何使用 jquery 将动态创建的 img 元素加载到 HTML5 画布中