2016-12-09 8 views
0

Ich habe ein Array und in jedem Array ist ein JSON-Objekt mit jedem Tag der Woche, so dass meine Array wie folgt aussehen würde:Wie kann ich mein verschachteltes Objekt innerhalb eines anderen Objekts innerhalb eines Arrays dynamisch aktualisieren?

var array = [ 
    { 
     "wednesday":{ 
      "notes":"some notes for Wednesday" 
     }, 
    }, 
    { 
     "thursday":{ 
      "notes":"some notes for Thursday" 
     } 
    } 
]; 

i weg telefonisch unter der direkt mit der Aktualisierung von meinem Objekt bekommen kann :

array[0].wednesday.notes = "updating Wednesday notes"; 

ich brauche aber es dynamisch zu aktualisieren ....

ich habe eine Funktion, die etwa wie folgt aussieht, muss ich den Tag der Woche auf meinem jSON-Objekt dynamisch rufen und nicht in nur Mittwoch gesperrt werden ay, ich muss in der lage sein, mittwoch, donnerstag, freitag usw. auf meinem objekt anzurufen, wie kann ich das tun?

function updateObject(index, empNum) { 
    console.log(index+", "+empNum) 
    array[index].employee = $("#employee_" + empNum).val(); 
    array[index].wednesday.notes = $("#employee_" + empNum + "_wed_notes").val(); 
    array[index].wednesday.start = $("#employee_" + empNum + "_wed_shift_start").val(); 
    array[index].wednesday.lunch = $("#employee_" + empNum + "_wed_lunch").val(); 
    array[index].wednesday.end = $("#employee_" + empNum + "_wed_shift_end").val(); 
    array[index].wednesday.short_day = $("#employee_" + empNum + "_wed_short_day").is(':checked'); 
    array[index].wednesday.lack_of_work = $("#employee_" + empNum + "_wed_lack_of_work").is(':checked'); 
    array[index].wednesday.full_day = $("#employee_" + empNum + "_wed_full_day").is(':checked'); 

    var row_count = $("input[id*='employee_" + empNum + "_wed_job_']").length; 
    for (var i = 0; i < row_count; i++) { 
     var data = {}; 
     data.job = $("input[id*='employee_" + empNum + "_wed_job_']").eq(i).val(); 
     data.hrs = $("input[id*='employee_" + empNum + "_wed_hrs_']").eq(i).val(); 
     data.cost_code = $("input[id*='employee_" + empNum + "_wed_cost_code_']").eq(i).val(); 
     data.st = $("input[id*='employee_" + empNum + "_wed_st_']").eq(i).is(':checked'); 
     data.ot = $("input[id*='employee_" + empNum + "_wed_ot_']").eq(i).is(':checked'); 
     data.dt = $("input[id*='employee_" + empNum + "_wed_dt_']").eq(i).is(':checked'); 
     array[index].wednesday.data[i] = data; 
    } 
    } 

Ich habe versucht, so etwas wie Array tun [index] [Donnerstag] .Notes = "x".

aber leider, dass nicht funktioniert, muss ich der Lage sein, den Tag der Woche zu rufen ich brauche, wenn ich die Funktion

nennen so muss ich es so etwas wie updateObject(2,1,"thursday");

+1

Sie scheinen zu wissen Sie bereits, wie man die Bracket-Notation verwendet, und das Hinzufügen eines weiteren Arguments zur Funktion sollte trivial sein? – adeneo

+0

leider weiß ich nicht, wie Bracket-Notation zu verwenden, oder zumindest ich bin nicht klar, was das ist =/ – aronlmin

+0

https://jsfiddle.net/vjon7k13/ – adeneo

Antwort

1

Sie müssen nur sein Verwenden Sie die bracket notation, um auf das richtige Element in Ihrem Array/Ihren Objekten zuzugreifen.

Mit dieser Funktion können Sie die Wochennummer (Array-Index) sowie den Tag eingeben, den Sie aktualisieren möchten.

var array = [ 
 
    { 
 
     "wednesday":{ 
 
      "notes":"some notes for Wednesday" 
 
     }, 
 
    }, 
 
    { 
 
     "thursday":{ 
 
      "notes":"some notes for Thursday" 
 
     } 
 
    } 
 
]; 
 

 
function updateArray(index, day, newNotes) { 
 
    array[index][day].notes = newNotes; 
 
} 
 

 
console.log('before', array); 
 

 
updateArray(1, 'thursday', 'updated notes'); 
 

 
console.log('after', array);

+0

Keine Notwendigkeit, sowohl Index als auch Tag zu übergeben. Wenn Sie einen übergeben, können Sie auf den anderen schließen. –

+0

@StephanBijzitter das ist nicht wahr. einen weiteren Blick auf die Array-Struktur. Jedes Element im Array ist ein Objekt, das mehrere Tage haben kann. – Punit

+0

Sie können ES6 Filter verwenden, um es auch für Sie zu tun! –

0

können Sie alle als so Ihre Daten zugreifen:

const updateObject = (index, empNum) => { 
    const i = array[index], k = Object.keys(i)[0] 
    if (!k) {return console.error("Invalid Data at index",index)} 
    i[k].notes = `Whatever you want with ${empNum}` 
} 

Die Funktion trennt den Schlüssel an einem bestimmten Ort gegeben und greift auf sie.

Beispiel: updateObject(0, "15 employees")

Wenn Sie lieber ^^ es von Tag zu tun haben würde dann Ihre Funktion würde wie folgt aussehen:

const updateObject = (day, empNum) => { 
    const i = array.map(r => { 
    const k = Object.keys(r)[0];if (!k) {return false} 
    return r[k] 
    }).filter(r => r)[0] 
    if (!i) {return console.error("Invalid Day [%s] provided",day)} 
    i.notes = `Whatever you want with ${empNum}` 
} 

Nicht Sie können es gerne verwenden: updateObject('tuesday', "15 employees")

+0

Ich bezweifle, dass der Fragesteller wissen würde, wie man diesen Code bei dieser Frage umsetzt. Gute Lösung. Die Pfeilfunktion ist jedoch einfach Unordnung. –

Verwandte Themen