如何序列化JavaScript关联数组

How to serialize a JavaScript associative array?

本文关键字:关联 数组 JavaScript 序列化      更新时间:2023-09-26

我需要序列化一个关联的JavaScript数组。这是一个简单形式的乘积和一个数值,但在构建数组之后,数组似乎是空的。

代码在这里:http://jsbin.com/usupi6/4/edit

通常,不要将JS数组用于"关联数组"。使用普通对象:

var array_products = {};

这就是$.each不起作用的原因:jQuery识别出您传递了数组,并且仅在数值属性上迭代。所有其他都将被忽略。

数组应该只有带数字键的条目。您可以分配字符串键,但许多函数不会将它们考虑在内。


更好:

使用jQuery时,可以使用jQuery.param[docs]进行序列化。您只需要构建正确的输入数组:

var array_products = []; // now we need an array again
$( '.check_product:checked' ).each(function( i, obj ) {
    // index and value
    var num = $(obj).next().val();
    var label = $(obj).next().next().attr( 'data-label' );
    // build array
    if( ( num > 0 ) && ( typeof num !== undefined ) ) {
        array_products.push({name: label, value: num});
    }      
});
var serialized_products = $.param(array_products);

无需实现自己的URI编码功能。

演示


最佳:

如果给输入字段一个合适的name:

<input name="sky_blue" class="percent_product" type="text" value="20" />

你甚至可以使用.serialize()[docs],并大大减少代码量(我使用下一个相邻的选择器[docs]

var serialized_products = $('.check_product:checked + input').serialize();

(不过它将包括0值)。

DEMO

您可以使用JSON库(或者本地JSON对象(如果可用))对其进行序列化。

var serialised = JSON.stringify(obj);

JSON.stringify(object)

顺便说一句,这里没有关联数组,只有对象。

使用json-js支持IE6和IE7等传统浏览器