2014-12-29 3 views
0

Я думал, что именно так данные будут искать каждую операцию запроса, имеющую уникальный идентификатор (который в приведенном ниже примере равен 1 & 2).создание динамического массива в динамическом javascript-объекте (пара ключ/значение)

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" 
       } 
      ] 
     } 
    } 
}; 

У меня есть функция, которая принимает уникальный идентификатор & списка в запросе в 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 с необходимыми для него значениями. Это работает.

Я еще одну функцию, которая принимает уникальный идентификатор в выборке & один 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 в массив (jiraDetail) queryKey, который даже не создан.

В настоящее время это ошибка 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

+1

Вы должны проверять наличие ключей в любом случае - это не имеет большого значения ... не знаю, почему это проблема? – tymeJV

+0

Это не проблема на самом деле, просто подтверждая, что если функция называется тысяча раз, проверка каждого времени существования является большой проблемой или нет. Поскольку он фактически создаст пространство один раз и время отдыха, он пропустит часть 'if'. –

ответ

1

Вы действительно должны проверить, если ключ присутствует в 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); 
}; 
+0

Привет, спасибо. Это именно то, что я думал. Кажется, проверка каждый раз не имеет большого значения, даже если функция называется тысячей раз. –

+0

В этом случае важна согласованность данных. Функция не слишком тяжелая, поэтому она не должна влиять на производительность. – Mouser

Смежные вопросы