在动态 JavaScript 对象(键/值对)中创建动态数组

creating dynamic array in a dynamic javascript object (key/value pair)

本文关键字:动态 数组 值对 创建 JavaScript 对象      更新时间:2023-09-26

我认为这就是数据查找每个具有唯一id的查询操作的方式(在下面的示例中为1和2)。

var finalData = {
    queryData: {
        "1": { // here "1" will be the auto-incrementing query operation id generated from somewhere
            jiraList: ["abc-123", "bcd-234"],
            jiraDetail: [
                {
                    jiraKey: "abc-123",
                    status: "Closed"
                },
                {
                    jiraKey: "bcd-234",
                    status: "Open"
                }
            ]
        },
        "2": {
            jiraList: ["xyz-987", "wxy-876"],
            jiraDetail: [
                {
                    jiraKey: "xyz-987",
                    status: "Open"
                },
                {
                    jiraKey: "wxy-876",
                    status: "Closed"
                }
            ]
        }
    }
};

我有一个接受查询的唯一 id 和 jira List(已经是一个数组)的函数:

var addJiraList = function (key, jiraList) {
    // sample params will be key: 1, jiraList: ['abc-123', 'bcd-234']
    finalData.queryData[key] = {jiraList: jiraList};
};

因此,上述函数在finalData.queryData中创建一个键值对(如果不存在),如果存在,它将添加/更新具有所需值的jiraList。这行得通。

我还有另一个函数,它接受查询的唯一 id 和一个 jiraDetail,即:

var addJiraData = function (queryKey, extractedData) {
    // sample params will be queryKey: 1, extractedData: { jiraKey: "abc-123", status: "Closed" }
    finalData.queryData[queryKey]["jiraDetail"].push(extractedData);
};

我想将extractedData作为参数推送到数组finalData.queryData.2.jiraDetail中。

现在的问题是finalData.queryData.<queryId>是动态的,jiraDetail是其中的一个数组。因此,如果queryKey is 1extractedData is {something},我将如何extractedData将一个项目添加到甚至未创建的queryKey数组(jiraDetail)中。

目前,它正在抛出finalData.queryData[queryKey] is undefined有效的错误,因为我无法在尚未创建的对象中添加。

我想的解决方案是检查是否finalData.queryData[queryKey] is undefined,如果它未定义,则首先创建包含空jiraDetail数组的对象,以便以下行不会抛出未定义的错误。

finalData.queryData[queryKey]["jiraDetail"].push(extractedData);

一定有更好的事情可以做,我目前无法思考和搜索。我想知道你会如何处理这种情况?

这是文件的链接,将根据我将在这里得到的答案进行更新。

https://github.com/sunilrebel/spann-jira/blob/master/lib/storageSystem.js

您确实需要检查密钥是否存在于finalData.queryData中,如果没有创建。看看这个解决方案:

var addJiraData = function (queryKey, extractedData) {
    if (!finalData.queryData[queryKey] || !finalData.queryData[queryKey]["jiraDetail"])
    {
        //one of the objects isn't present, let's create it.
        !finalData.queryData[queryKey] ? addJiraList(queryKey, []) : null; //add missing queryKey and empty array as jiraList.
        finalData.queryData[queryKey]["jiraDetail"] = []; //create empty jiraDetail array.
    }
    //then fill it with data, since it is available now.
    finalData.queryData[queryKey]["jiraDetail"].push(extractedData);
};