You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过索引覆盖JavaScript对象的属性值?

问题根因

你的代码中jobPayment对象的属性是自定义字符串键(date/amount/method/reference),并非数组式的数字索引,直接用表单元素循环的数字下标idx作为键访问对象属性,无法匹配到你预设的属性,所以赋值失效。

实现方案

方案1:按表单元素顺序匹配属性(适配现有代码结构)

提前把jobPayment的属性名按页面里表单元素的排列顺序存入数组,循环时通过下标取到对应属性名再赋值即可,注意amount是数值类型,建议做类型转换避免存为字符串:

GetAllData: function(){
    var jobPayments = $("#table1 tbody tr");
    var jobPaymentsModels = [];
    // 按页面中input/select的排列顺序定义属性名数组
    var paymentKeys = ["date", "amount", "method", "reference"];
    jobPayments.each(function (idx, vl) {
        var jobPayment = {date:"",amount:0.0,method:"", reference:""};
        $(this).find("td input,select").each(function (idx, vl) {
            // 用索引取对应的属性名
            var key = paymentKeys[idx];
            // amount字段单独转数值类型
            jobPayment[key] = key === "amount" ? parseFloat(vl.value) || 0.0 : vl.value;
        });
        jobPaymentsModels.push(jobPayment);
    });
    return jobPaymentsModels;
}

方案2:绑定name属性实现更稳定的赋值(推荐)

给页面中对应的input、select元素添加name属性,值和jobPayment的属性名一一对应(比如日期输入框加name="date",金额输入框加name="amount"),后续即使表单元素顺序调整也不会影响赋值逻辑:

GetAllData: function(){
    var jobPayments = $("#table1 tbody tr");
    var jobPaymentsModels = [];
    jobPayments.each(function (idx, vl) {
        var jobPayment = {date:"",amount:0.0,method:"", reference:""};
        $(this).find("td input,select").each(function (idx, vl) {
            var key = vl.name;
            if(jobPayment.hasOwnProperty(key)){ // 只赋值预设存在的属性
                jobPayment[key] = key === "amount" ? parseFloat(vl.value) || 0.0 : vl.value;
            }
        });
        jobPaymentsModels.push(jobPayment);
    });
    return jobPaymentsModels;
}

内容的提问来源于stack exchange,提问作者Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:54:03