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

标签 javascript arrays json

我认为这就是数据查找具有唯一 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 列表(已经是一个数组)的函数:

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 1 & extractedData 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

最佳答案

您确实需要检查该 key 是否存在于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);
};

关于javascript - 在动态 JavaScript 对象中创建动态数组(键/值对),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695597/

相关文章:

c - 打印字符串数组

c# - 统一: Saving/Loading Sprites as Json

java - 有没有一种简单的方法可以使用 RestEasy 通过 JSON 传递对象集合?

javascript - import/export 报表

javascript - 为什么悬停选择器不适用于类?

javascript - 按两项对一维数组进行排序

javascript - 如何让 jQuery animateNumber 动态拉取值?

python - numpy.concatenate 多维数组

python - 使用 numpy 数组调用 lambda

android - 如何在 android 中使用 Gson 库解析 json 响应?