首页 > 解决方案 > 从 javascript 对象中的命名键获取值

问题描述

我试图通过在 javascript 对象中提供文字键来获取特定值。在下图中,您可以看到“过滤器”等于“已批准”。这来自下图中的 reimb_status_description。

代码的第 6 行是我将过滤器分配给值的地方。

const filter = Object.values(jsonData[i]["reimb_status_description"]).join("");

我不明白的是,如果我没有以 结尾.join(""),过滤器将读作“A,p,p,r,o,v,e,d”,这显然是一个字母数组。有人可以帮我理解为什么结果是一个数组而不是一个字符串吗?另外,有没有更好的方法来提取我正在寻找的数据?

在此处输入图像描述

function PopulateReimbursementTable(jsonData, appliedFilter)
{
    ClearReimbursementTable();

    for(var i = 0; i < jsonData.length; i++)
    {
        const tr = document.createElement("tr");
        const entries = Object.entries(jsonData[i])

        const filter = Object.values(jsonData[i]["reimb_status_description"]).join("");
        console.log("filter: " + filter)
        for(const [key, property] of entries)
        {
            if(fields.includes(key)){
                console.log(key + "\t" + property);
                const td = document.createElement("td");
                if(key == "reimb_date_submitted" || key == "reimb_date_resolved"){
                    if(property == null)
                    {
                        td.innerHTML = "tbd";
                    }else{
                        var d = new Date(property);
                        let formatted_date = appendLeadingZeroes((d.getMonth() + 1)) + "-" + appendLeadingZeroes(d.getDate()) + "-" + d.getFullYear();
                        //console.log(formatted_date)
                        td.innerHTML = formatted_date;
                    }
                } else if(key == 'reimb_amount'){
                    if(property === null || property === undefined)
                    {
                        td.innerHTML = "tbd";
                    }else{
                        td.innerHTML = formatter.format(property);
                    }   
                }
                else
                {
                    if(property === null || property === undefined)
                    {
                        td.innerHTML = "tbd";
                    }else{
                        td.innerHTML = property;
                    }               
                }

                if(fields.includes(key))
                {
                    tr.appendChild(td);
                }
            }

        }

        if(appliedFilter == "All"){
            reimbTableBody.appendChild(tr);
        }
        else if(filter == appliedFilter){
            reimbTableBody.appendChild(tr);
        }
    }
}

标签: javascript

解决方案


这就是1Object.values的作用。因此,在您的情况下,我认为您可以使用它来检索字符串值。StringjsonData[i].reimb_status_description

1为什么?因为字符串实际上是一个包含字符类型元素的一维数组。

console.log(Object.values("some string"));

// this would deliver the string though
console.log(Object.values({someString: "some string"})[0]);
.as-console-wrapper { top: 0; max-height: 100% !important; }


推荐阅读