从jQuery创建关联数组。每个循环

从jQuery创建关联数组。每个循环,jquery,Jquery,一个直接的jQuery$。每个循环一个表行。我对对象不太在行,在使用.push()方法时遇到了困难 我应该得到: [{"buyerPoINPUT":"1234567"},{"jobINPUT":"Replace grommit"},{"shipMethodINPUT":"etc"}] 相反,我得到的是: [{"t1":"1234567"},{"t1":"Replace grommit"},{"t1":"etc"}] 为什么我得到的是重复的t1变量名,而不是t1var内容(id属性) HTM

一个直接的jQuery
$。每个
循环一个表行。我对对象不太在行,在使用
.push()
方法时遇到了困难

我应该得到:

[{"buyerPoINPUT":"1234567"},{"jobINPUT":"Replace grommit"},{"shipMethodINPUT":"etc"}]
相反,我得到的是:

[{"t1":"1234567"},{"t1":"Replace grommit"},{"t1":"etc"}]
为什么我得到的是重复的
t1
变量名,而不是
t1
var内容(id属性)

HTML:

    <div id="summaryTableDIV" class="b1">
        <table id="summaryTable">
            <thead>
                <th id="buyerPoTH">PO NO.</th><th id="jobTH">JOB</th><th id="shipMethodTH">SHIPPING<br>METHOD</th><th id="shipTermsTH">SHIPPING<br>TERMS</th><th id="payTermsTH">PAYMENT<br>TERMS</th><th id="blankTH"></th>
            </thead>
            <tbody>
                <td id="buyerPoTD"   ><input type="text" id="buyerPoINPUT"    value="1234567" /></td>
                <td id="jobTD"       ><input type="text" id="jobINPUT"        value="Replace grommit" /></td>
                <td id="shipMethodTD"><input type="text" id="shipMethodINPUT" value="Loomis or DHL" /></td>
                <td id="shipTermsTD" ><input type="text" id="shipTermsINPUT"  value="FOB Washington" /></td>
                <td id="payTermsTD"  ><input type="text" id="shipMethodINPUT" value="see below" /></td>
                <td id="blankTD"     ><input type="text" id="blankINPUT" value="Okay to proceed" /></td>
            </tbody>
        </table>
    </div><!-- #summaryTableDIV -->
var objSumTbl = new Array();

$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    objSumTbl.push({
        t1 : t2
    });
});
alert( JSON.stringify(objSumTbl) ); 

这不是创建对象属性变量的方式

试着这样做:

var objSumTbl = new Array();
$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    var obj = {};
    obj[t1] = t2;
    objSumTbl.push(obj);
});

alert( JSON.stringify(objSumTbl) ); 

这不是创建对象属性变量的方式

试着这样做:

var objSumTbl = new Array();
$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    var obj = {};
    obj[t1] = t2;
    objSumTbl.push(obj);
});

alert( JSON.stringify(objSumTbl) ); 

事实证明,在JavaScript中定义对象不会将键/值对的键部分解释为变量。这实际上是命名属性
t1
,而不是
t1
变量的值

但是,可以单独创建对象,并使用变量引用对象上的特性来定义该特性。大概是这样的:

var objSumTbl = new Array();

$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    var newObj = {};
    newObj[t1] = t2;
    objSumTbl.push(newObj);
});
alert( JSON.stringify(objSumTbl) );
{"buyerPoINPUT":"1234567","jobINPUT":"Replace grommit","shipMethodINPUT":"etc"}

事实证明,在JavaScript中定义对象不会将键/值对的键部分解释为变量。这实际上是命名属性
t1
,而不是
t1
变量的值

但是,可以单独创建对象,并使用变量引用对象上的特性来定义该特性。大概是这样的:

var objSumTbl = new Array();

$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    var newObj = {};
    newObj[t1] = t2;
    objSumTbl.push(newObj);
});
alert( JSON.stringify(objSumTbl) );
{"buyerPoINPUT":"1234567","jobINPUT":"Replace grommit","shipMethodINPUT":"etc"}

当您使用对象表示法作为{key:value}时,“key”将始终被视为字符串常量而不是变量名,您需要使用对象[key\u name\u var]表示法

这应该起作用:

var thisTD = $(this);
var t1 = thisTD.attr('id');
var t2 = thisTD.val();
var new_obj = {};
new_obj[t1] = t2;
objSumTbl.push(new_obj);

更新:根据我们在评论中的讨论,您期望的结果如下:

var objSumTbl = new Array();

$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    var newObj = {};
    newObj[t1] = t2;
    objSumTbl.push(newObj);
});
alert( JSON.stringify(objSumTbl) );
{"buyerPoINPUT":"1234567","jobINPUT":"Replace grommit","shipMethodINPUT":"etc"}
然后您应该将objSumTbl定义为一个对象,并使用[key]符号在循环内设置值:

var objSumTbl = {};

$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    objSumTbl[t1] = t2;
});
alert( JSON.stringify(objSumTbl) ); 
要遍历对象内的所有值,请使用

Object.keys(objSumTbl)
要获取objSumTbl中所有键的数组,请在该数组上执行for循环:

var keys = Object.keys(objSumTbl);
for(i=0;i<keys.length;i++){
    console.log(objSumTbl[ keys[i] ]);
}
var-keys=Object.keys(objSumTbl);

对于(i=0;i当您使用对象表示法作为{key:value},'key'将始终被视为字符串常量而不是变量名,您需要使用对象[key\u name\u var]表示法

这应该起作用:

var thisTD = $(this);
var t1 = thisTD.attr('id');
var t2 = thisTD.val();
var new_obj = {};
new_obj[t1] = t2;
objSumTbl.push(new_obj);

更新:根据我们在评论中的讨论,您期望的结果如下:

var objSumTbl = new Array();

$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    var newObj = {};
    newObj[t1] = t2;
    objSumTbl.push(newObj);
});
alert( JSON.stringify(objSumTbl) );
{"buyerPoINPUT":"1234567","jobINPUT":"Replace grommit","shipMethodINPUT":"etc"}
然后您应该将objSumTbl定义为一个对象,并使用[key]符号在循环内设置值:

var objSumTbl = {};

$("#summaryTable > tbody > tr > td > input").each(function(){
    var thisTD = $(this);
    var t1 = thisTD.attr('id');
    var t2 = thisTD.val();
    objSumTbl[t1] = t2;
});
alert( JSON.stringify(objSumTbl) ); 
要遍历对象内的所有值,请使用

Object.keys(objSumTbl)
要获取objSumTbl中所有键的数组,请在该数组上执行for循环:

var keys = Object.keys(objSumTbl);
for(i=0;i<keys.length;i++){
    console.log(objSumTbl[ keys[i] ]);
}
var-keys=Object.keys(objSumTbl);

对于(i=0;i您是否直接尝试过
objSumTbl.push({$(this).attr('id'):t2})
您是否直接尝试过
objSumTbl.push({$(this.attr('id'):t2})
如果我想让输出看起来像这样,标准数组,我该如何做:
[“BuyerPainput:“1234567”,“jobINPUT:“Replace grommit”,“shipMethodINPUT:”等]
如果可能的话,请编辑您的答案,并在底部添加响应。(我问的原因是我将以json的形式存储在数据库中,我希望以后检索时使用最简单的格式,重新填充一个新表)这不是一个有效的数组表示法,我想您需要的是一个对象而不是数组?如{“buyerPoINPUT”:“1234567”,“jobINPUT”:“Replace grommit”,“shipMethodINPUT”:“etc”}?是的,你是对的!一个循环会是什么样子,把所有的东西都放回表中?(不是ID,它们已经在那里了,只是数据)为了保存,将objSumTbl定义为object,并在循环中使用objSumTbl[t1]=t2;。为了加载,使用object.keys(objVarName)要获得objVarName拥有的密钥数组,然后在该数组上执行for循环。太棒了,谢谢。接受。如果我希望输出像这样,标准数组,我将如何做:
[“BuyerPainput”:“1234567”,“jobINPUT”:“Replace grommit”,“shipMethodINPUT”:“etc”]
如果可能,请编辑您的答案,并在底部添加响应。(我问的原因是我将以json的形式存储在数据库中,我希望以后检索时使用最简单的格式,重新填充一个新表)这不是一个有效的数组表示法,我想你想要的是一个对象而不是数组?比如{“BuyerPainput”:“1234567”,“jobINPUT”:“Replace grommit”,“shipMethodINPUT”:“etc”}?是的,你是对的!那么将所有内容放回表中会是什么样的循环呢?(不是ID,它们已经存在,只是数据)为了保存,将objSumTbl定义为object,并在循环中使用objSumTbl[t1]=t2;为了加载,使用object.keys(objVarName)要获得objVarName拥有的密钥数组,请在该数组上执行for循环。太棒了,谢谢。接受。