js在$ .each中创建新的assoc对象

时间:2015-01-30 01:49:21

标签: javascript jquery json

大脑告诉我这应该有效。 Javascript告诉我不,不。为什么javascript正确,怎么做呢?

我也愿意接触其他方法 - 我想要做的就是返回一个变量名称(cn,sc,fn)的JSON字符串及其值(例如var cn = $('#deFNIN').val(); - 所以:"cn":"MacDonalds","sc":"Mac"

jsFiddle

HTML:

<input id="deCoNameIN" type="text" value="MacDonalds" /><br>
<input id="deShortCoIN" type="text" value="Macs" /><br>
<input id="deFNIN" type="text" value="Fred" /><br>

js/jQ:

var objFields = {
    'cn': { 'id':'deCoNameIN',  'required':'True',  'title':'Company Name'},
    'sc': { 'id':'deShortCoIN', 'required':'True',  'title':'Short Co name' },
    'fn': { 'id':'deFNIN',      'required':'false', 'title':'Contact first name' },
};
var arrDistinfo = [];

$.each(objFields,function(_, varname){
    tmp = $("#"+varname.id).val().trim();
    alert('Varname: ' +_+'   Val: '+tmp);
    arrDistinfo.push({_ : tmp});
});

var xx = JSON.stringify(arrDistinfo);
alert(xx);

所需的输出应如下所示:

["cn":"Macdonalds", "cs":"Macs", "fn":"Fred"]

1 个答案:

答案 0 :(得分:3)

您不能使用类似对象键之类的变量(在您的情况下,{_ : tmp}{"_" : tmp}相同),您需要数组表示法:

&#13;
&#13;
var objFields = {
  'cn': {
    'id': 'deCoNameIN',
    'required': 'True',
    'title': 'Company Name'
  },
  'sc': {
    'id': 'deShortCoIN',
    'required': 'True',
    'title': 'Short Co name'
  },
  'fn': {
    'id': 'deFNIN',
    'required': 'false',
    'title': 'Contact first name'
  },
};
var arrDistinfo = [];

$.each(objFields, function(_, varname) {
  tmp = $("#" + varname.id).val().trim();
  alert('Varname: ' + _ + '   Val: ' + tmp);
  var obj = {};
  obj[_] = tmp;
  arrDistinfo.push(obj);
});

var xx = JSON.stringify(arrDistinfo);
alert(xx);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="deCoNameIN" type="text" value="MacDonalds" />
<br>
<input id="deShortCoIN" type="text" value="Macs" />
<br>
<input id="deFNIN" type="text" value="Fred" />
<br>
&#13;
&#13;
&#13;


更新

要获得该特定格式,您需要将其设为字符串,因为JS不具有类似数组的结构。

&#13;
&#13;
var objFields = {
  'cn': {
    'id': 'deCoNameIN',
    'required': 'True',
    'title': 'Company Name'
  },
  'sc': {
    'id': 'deShortCoIN',
    'required': 'True',
    'title': 'Short Co name'
  },
  'fn': {
    'id': 'deFNIN',
    'required': 'false',
    'title': 'Contact first name'
  },
};
var arrDistinfo = {};

$.each(objFields, function(_, varname) {
  tmp = $("#" + varname.id).val().trim();
  arrDistinfo[_] = tmp;
});

var output = [];
for (var i in arrDistinfo) {
  output.push('"' + i + '":"' + arrDistinfo[i] + '"'); 
}

alert('[' + output.join(', ') + ']');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input id="deCoNameIN" type="text" value="MacDonalds" />
    <br>
    <input id="deShortCoIN" type="text" value="Macs" />
    <br>
    <input id="deFNIN" type="text" value="Fred" />
    <br>
&#13;
&#13;
&#13;