【问题标题】:create an object array from a form in javascript从 javascript 中的表单创建对象数组
【发布时间】:2015-07-05 00:11:47
【问题描述】:

这是在 python 中我需要两分钟才能解决的问题,但在 js 或 jquery 中我需要花费数小时... 我有一个表格,我需要详细说明数据客户端。

与:

var serializedData = $('form#ae_form_grid').serialize() 

我得到这个:

"id=13&quantita_gen_grid=2&prezzo_gen_grid=120&sconto_gen_grid=&prezzo-15=120&quantita-15=4&sconto-15=&selezionato-16=on&prezzo-16=120&quantita-16=2&sconto-16=&prezzo-14=120&quantita-14=2&sconto- 14=&selezionato-17=on&prezzo-17=122&quantita-17=3&sconto-17="

我需要创建一个对象数组,可能来自:

["16":{ prezzo:120,quantita:2,sconto:""},"17":{prezzo:122,quantita:3,sconto:""}]

16 和 17 来自名称中带有“selezionato”的键,prezzo、quantita... 是 -16 和 -17 ..

我试过了:

    $.each(serializedData.split('&'), function (index, elem) {
        var vals = elem.split('=');
        var selected = vals[0].split("-");
        if (selected[0] == "selezionato") {
            sel.push(selected[1])
        }
    })

我有一个正确的键数组,但我可以走得更远。

谢谢 F

【问题讨论】:

  • 您能分享您的表单 HTML 吗?比序列化然后解析更好的解决方案是使用 JQuery 直接访问所需的元素(甚至创建您正在寻找的数据结构)
  • html代码不易复制,因为是jinja2生成的。它是一个大小和颜色变化的网格,项目相似和不同,仅通过选中的复选框。问题是表单处于模态,因此是异步的,我无法访问主 dom,所以我需要创建这个对象,存储在 html5 存储中并从另一个窗口处理这些数据。谢谢

标签: javascript jquery arrays forms


【解决方案1】:

你在这里:

var input = "id=13&quantita_gen_grid=2&prezzo_gen_grid=120&sconto_gen_grid=&prezzo-15=120&quantita-15=4&sconto-15=&selezionato-16=on&prezzo-16=120&quantita-16=2&sconto-16=&prezzo-14=120&quantita-14=2&sconto-14=&selezionato-17=on&prezzo-17=122&quantita-17=3&sconto-17=";
//["16":{ prezzo:120,quantita:2,sconto:""},"17":{prezzo:122,quantita:3,sconto:""}
var array = input.split('&');
var attributes = ['prezzo', 'quantita', 'sconto'];
var keys = $.map(array, function(value) {
  var string = value.split('=')[0];
  if (string.indexOf(attributes[0]) > -1) return string.split('-')[1];
});
keys = $.unique(keys).sort();
//console.log(JSON.stringify(keys));
var result = []
$.each(keys, function(index, key) {
  var item = {};
  var obj = {};
  $.each(array, function(i, v) {
    var k = v.split('=')[0];
    //console.log("==" + k);
    if (k.indexOf(key) > -1) {
      //console.log("====" + k.split('-')[0]);
      if ($.inArray(k.split('-')[0], attributes) > -1) {
        obj[k.split('-')[0]] = v.split('=')[1];
        //console.log(JSON.stringify(obj));
      }
    }

  });
  //console.log(JSON.stringify(obj));
  item[key] = obj;
  result.push(item);
});
$('span').text(JSON.stringify(result));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span></span>

希望对您有所帮助。

【讨论】:

  • if (string.indexOf("selezionato") > -1) return string.split('-')[1];我只改变了这一行,我只需要选定的项目。谢谢你的回答
猜你喜欢
  • 1970-01-01
  • 2010-10-04
  • 2015-03-05
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
相关资源
最近更新 更多