【问题标题】:How to serialize a JavaScript associative array?如何序列化 JavaScript 关联数组?
【发布时间】:2011-09-20 06:47:27
【问题描述】:

我需要序列化一个关联的 JavaScript 数组。 它是一种简单形式的产品和一个数值,但刚刚构建的数组似乎是空的。

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

【问题讨论】:

    标签: javascript jquery arrays forms


    【解决方案1】:

    一般来说,不要将 JS 数组用于“关联数组”。使用普通对象:

    var array_products = {};
    

    这就是$.each 不起作用的原因:jQuery 识别出您传递了一个 array 并且只是在迭代 numerical 属性。其他所有将被忽略。

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


    更好:

    当您使用 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 编码功能。

    DEMO


    最佳:

    如果你给输入字段一个正确的name

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

    你甚至可以使用.serialize() [docs],大大减少代码量(我用next adjacent selector [docs]):

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

    (不过,它将包括 0 值)。

    DEMO

    【讨论】:

      【解决方案2】:

      您可以使用JSON library(或本机JSON object,如果可用)对其进行序列化。

      var serialised = JSON.stringify(obj);
      

      【讨论】:

        【解决方案3】:

        JSON.stringify(object)

        作为旁注,没有关联数组,只有对象。

        使用json-js 支持IE6 和IE7 等旧版浏览器

        【讨论】:

        • JSON.stringify 不是仅适用于更现代的浏览器吗?除非您包含对json2.js 的脚本引用?
        • @AshClarke 取决于您对现代浏览器的定义。所有当前和最近的浏览器都支持它。如果您需要 legacy 支持,请使用 json2(我已经添加了链接)
        • @Raynos 不会将 let arr = []; a['foo'] = 'bar'; JSON.stringify(a); 字符串化为 '[]'
        猜你喜欢
        • 1970-01-01
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 2011-07-09
        • 1970-01-01
        • 2016-06-04
        • 2010-09-12
        相关资源
        最近更新 更多