我认为这就是数据查找具有唯一 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/