2016-12-09 4 views
0

私は私の配列は、このようなものになりますので、配列を持っており、各配列内の各曜日を持つJSONオブジェクトです:配列内の別のオブジェクト内の入れ子になったオブジェクトを動的に更新する方法はありますか?

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

を私は次のように呼び出すことにより、直接私のオブジェクトを更新して逃げることができます:

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

しかし、私は

私はこのような何かに見える機能を持っている....それを動的に更新する必要があり、私は動的に私のJSONオブジェクトに曜日を呼び出していないする必要がありますちょうどwednesdにロックされるああ、私は水曜日、木曜日、金曜日など私のオブジェクトに呼び出すことができる必要があります、どのように私はこれを行うことができますか?

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

私は= "X" 配列[インデックス] [木曜日] .notesを行うようなものを試してみました。

が、残念ながらそのdoesntの仕事、私はので、私はあなただけに必要なことはupdateObject(2,1,"thursday");

+1

あなたがいるように見えます既にブラケット記法を使用する方法を知っていて、関数に別の引数を追加するのは簡単ではありませんか? – adeneo

+0

残念なことに、私はブラケット記法を使用する方法、またはそれが何であるかを少なくとも明確にはわかりません=/ – aronlmin

+0

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

答えて

1

のようなものである必要が

関数を呼び出すとき、私は必要な曜日を呼び出すことができるようにする必要がありますbracket notationを使用して、配列/オブジェクト内の正しい要素にアクセスします。

この機能を使用すると、週番号(配列インデックス)と更新する日を入力できます。

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

インデックスと曜日の両方を渡す必要はなく、一方を渡すともう一方を推論することができます。 –

+0

@StephanBijzitterは真実ではありません。アレイ構造をもう一度見てください。配列の各要素は複数の日数を持つことができるオブジェクトです。 – Punit

+0

ES6フィルタを使用しても同じことができます。 –

0

あなたはそうと、すべてのデータにアクセスすることができます

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}` 
} 

機能は、特定の場所で特定のキーを分離し、それをアクセスします。

例:あなたが好きそれを使用することができます

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}` 
} 

ない:あなたはむしろ^^そして、あなたの関数は次のようになり一日でそれを行うだろう場合はupdateObject(0, "15 employees")

updateObject('tuesday', "15 employees")

+0

私は、質問者がこの問題を考えると、このコードをどのように翻訳するかを知っているのではないかと疑います。しかし、良い解決策。しかし、矢印の機能は単にクラッタです。 –

関連する問題