繁体   English   中英

从jQuery中的serializeArray获取值的最有效方法是什么?

[英]What's the most efficient way to fetch the value from a serializeArray in jQuery?

我将窗体的值保存为serializeArray()如下所示:

$('form').serializeArray();

这将产生一个对象数组,每个对象都有名称-值对。 像这样:

0: Object
    name: "key1"
    value: "val1"
1: Object
    name: "key2"
    value: "val2"
2: Object
    name: "key3"
    value: "val3"
3: Object
    name: "key4[]"
    value: "array-val-1"
4: Object
    name: "key4[]"
    value: "array-val-2"
5: Object
    name: "key4[]"
    value: "array-val-3"

假设一个人不知道key2是第二个对象,最有效的方法就是获取名称为key2的特定对象的值?

key4[]数组中的第二项(即key4[1] )如何? (大概来自html形式的名称数组输入,例如<input name="favoriteColors[]">

如果这更容易从serialize() ,我也很乐意。

您可以创建一个与您的键/值匹配的对象,然后像字典一样访问它:

myArray = $('form').serializeArray();
dict = {};

$(myArray).each(function(i, field){
 dict[field.name] = field.value;
 });

 console.log(dict["key2"])

假设键是唯一的,也许:

function byKey(arr, key) {
  return arr.filter(function (el) { return el.name === key });
}

byKey(arr, 'key2')[0].value // val2

注意[0]的原因是filter返回一个数组,因此您需要获取第一个元素。

如果键名不是唯一的,则将返回更大的数组。 由您决定要执行的操作,例如: byKey(arr, 'key2')[1].value将返回第二个元素。

您也可以将上述代码实现到您的函数中。

function getValByKey(arr, key) {
  var result = arr.filter(function (el) { return el.name === key });
  return result[0].value;
}

getValByKey(arr, 'key2') // val2

演示版

您可以使用以下命令:

$.each(arr, function(i, obj) {
    if(obj.name === "key2") console.log(obj.value);
});

这是演示: http : //jsfiddle.net/tcJuG/1/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM