[英]Flatten Array object in javascript if child array have dynamic key value pair object
[英]creating dynamic array in a dynamic javascript object (key/value pair)
我以為這是數據如何查找具有唯一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
您確實需要檢查鍵是否存在於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);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.