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

Create new assoc object in $.each

本文关键字:assoc 对象 创建 each      更新时间:2023-09-26

我认为这个JavaScript应该可以工作,但似乎没有。我能做些什么来修复它。

我也愿意接受其他方法。我想做的只是返回变量名称(cn,sc,fn)及其值(例如。 var cn = $('#deFNIN').val(); -- 所以: "cn":"MacDonalds","sc":"Mac"

js小提琴

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"]

你不能像这样的变量使用像对象键这样的变量(在你的例子中,{_ : tmp}{"_" : tmp} 相同),你需要数组符号:

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);
<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>


更新

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

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(', ') + ']');
<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>