将数组项映射/链接到另一个对象的键

Posted

技术标签:

【中文标题】将数组项映射/链接到另一个对象的键【英文标题】:Map/Link array item to key of another Object 【发布时间】:2021-12-06 03:50:54 【问题描述】:

我正在尝试使用以下代码生成报告页面。问题是,我无法从 objItems[i] 对象中选择 listTDRender[k] 等效数组值。我收到“Uncaught TypeError: Cannot read properties of undefined (reading '0')”错误。

当前工作流程 第 1 步 - 获取配置(生成列表数组)和拆分值

function loadReport() 
    for (var j = 0; j < list.length; j++) 
        const listVal = list[j].split(",");
        const listFieldRender = listVal[2].replaceAll('|',',');
        var listTDRender = listVal[2].split("|");                       
        $.ajax(
            async: false,
            url: "SPO/_api/web/lists/getbytitle('" + listVal[0] + "')/items?$select=Created,EncodedAbsUrl,"+ listFieldRender +"&$top=2&$orderby=Created%20desc",
            type: "GET", headers: "accept": "application / json;odata = verbose",
            success: function(data) 
                var objItems = data.d.results;
                var tableContent = '<table id="' + listVal[1] + '" style="width:100%;"><caption class="text-info">' + listVal[1] + '</caption>';
                for (var i = 0; i < objItems.length; i++) 
                     tableContent += '<tr>';
                        for (var k = 0; k < listTDRender.length; k++) 
                            tableContent += '<td>' + objItems[i].listTDRender[k] + '</td>';
                        
                     tableContent += '</tr>';
                
               $('#renderReport').append(tableContent);
            ,
            error: function(error) 
                alert(JSON.stringify(error));
            
        );
    

下面的示例数据

list
[
    "ABC,ABC Report,DistrDate|Rev|Owner",
    "DEF,DEF Report,DistrDate|Rev|Owner",
    "GHI,GHI Report,DistrDate|Owner",
    "JKL,JKL Report,distrDate|Owner"
]

listTDRender
[
    "DistrDate",
    "Rev",
    "Owner"
]

objItems

    "d": 
        "results": [
            
                "DistrDate": "2021-10-19T03:03:00Z",
                "Rev": 0,
                "Owner": "ABC",
                "Created": "2021-10-19T03:03:00Z",
                "EncodedAbsUrl": "URL"
            ,
            
                "DistrDate": "2021-10-18T03:02:49Z",
                "Rev": 0,
                "Owner": "ABC",
                "Created": "2021-10-18T03:02:49Z",
                "EncodedAbsUrl": "URL"
            
        ]
    


【问题讨论】:

async: false 已弃用,不应再使用。 试试objItems[i][listTDRender[k]]。没有为 objItems 中的对象定义属性 listTDRender 【参考方案1】:

必须是objItems[i][listTDRender[k]],而不是objItems[i].listTDRender[k]

您不想访问名为listTDRender 的属性,而是访问名称等于listTDRender[k] 内容的属性。

【讨论】:

以上是关于将数组项映射/链接到另一个对象的键的主要内容,如果未能解决你的问题,请参考以下文章

RestKit - 将数组的键路径映射到该数组内的对象

如何在 TypeScript Angular 2 中将 Json 对象数组映射到另一个普通 json 对象

我如何将一次出现的所有项目过滤到一个列表中,并将多次出现的所有项目过滤到另一个列表中?

将一个数组的唯一值映射到另一个数组的对应总和

PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?

将数组中的任意值映射到另一个数组中存在的颜色