【问题标题】:jQuery: Loop through elements by class and create associative arrayjQuery:按类循环遍历元素并创建关联数组
【发布时间】:2020-12-04 09:02:49
【问题描述】:

我有一个可变的元素列表,需要成对获取它们的名称和值(关联数组或对象)。

到目前为止,我有以下内容,但如何为每个元素创建名称和值对?

var names = [];
var values = [];

$('.modalField').each(function() {
    fieldName = $(this).attr('name');
    fieldVal = $(this).val();
    
    names.push(fieldName);
    values.push(fieldVal);
});

感谢您的帮助,
汤姆

【问题讨论】:

标签: javascript jquery loops each associative-array


【解决方案1】:

使用bracket notation

var assoc = {};
$('.modalField').each(function() {
    let fieldName = $(this).attr('name');
    let fieldVal = $(this).val();
    assoc[fieldName] = fieldVal;
});

(另外,你应该在函数内部使用 let/var/const 初始化你的变量,这样它们就不会泄漏到全局范围内。)

【讨论】:

  • ...这个话题肯定已经出现过?
  • @HereticMonkey:我认为是这样,但无法通过搜索。
  • 这是完美的 - 非常感谢!关于 var 的初始化,我已经在函数内部完成了,这里就省略了。
【解决方案2】:

您说的是名称-值,但您似乎想要一个对象

你可以做任何一个

// Object
const obj = {};
$('.modalField').each(function() {
  const fieldName = $(this).attr('name');
  const fieldVal = $(this).val();
  obj[fieldName] = fieldVal
});

console.log(obj)

// OR Name-Value pair


const arr = $('.modalField').map(function() {
  return {
    [$(this).attr('name')]: $(this).val()
  }
}).get()


console.log(arr)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input name="a" value="1" class="modalField" />
<input name="b" value="2" class="modalField" />
<input name="c" value="3" class="modalField" />
<input name="d" value="4" class="modalField" />

【讨论】:

    【解决方案3】:

    这样的?

    var fields = [];
    
    $('.modalField').each(function() {
        var name = $(this).attr('name');
        var value = $(this).val();
        
        fields.push({ name, value });
    });
    
    console.log(fields);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div>
      <input class="modalField" name="n1" value="v1" />
      <input class="modalField" name="n2" value="v2" />
      <input class="modalField" name="n3" value="v3" />
    </div>

    输出:

    [
      {
        "name": "n1",
        "value": "v1"
      },
      {
        "name": "n2",
        "value": "v2"
      },
      {
        "name": "n3",
        "value": "v3"
      }
    ]
    

    【讨论】:

    • 虽然这不是一个关联数组,但有一个 built-in jquery 方法可以做到这一点。
    • 你是对的。没有注意到associative 这个词。留下这个答案以防其他人也错过它。
    • 也非常感谢 - 它也有帮助。
    【解决方案4】:

    我建议你创建一个对象,而不是名称和值数组。

    var obj ={};
    $('.modalField').each(function() {
        obj[$(this).attr('name')] = $(this).val();
       
    });
    

    因此,这样您将拥有像这样的对象(名称仅用作示例): {"name1":"val1","name2":"val2","name3":"val3"}

    【讨论】:

    猜你喜欢
    • 2018-09-09
    • 2020-10-19
    • 2018-07-17
    • 2012-06-26
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多