Rumah  >  Soal Jawab  >  teks badan

Gunakan operasi kurangkan untuk beroperasi pada objek

<p>Ini adalah input saya:<kod>{field1: {field2:'123', field3:{field4:'123'}}}</code></p> <p>Sasaran ialah:<kod>{field1: {kemas kini: {field2:'123', field3: {update: {field4:'123'}}</code></p> <p>Ini yang saya cuba: </p> <pre class="brush:php;toolbar:false;">function updateDictHelper(obj) { Object.entry(obj).reduce((updateClause = {}, [kunci, nilai]) => { jika (jenis nilai !== 'objek') { kembalikan {... updateClause, [key]: value} } lain { kembalikan {... updateClause, [key]: {update: updateDictHelper(value)}} } }) }</pre> <p>Namun, saya tidak boleh membuatnya berfungsi walau apa pun. Saya sangat baru dengan Java/TypeScript dan sebarang bantuan akan sangat dihargai. </p>
P粉423694341P粉423694341429 hari yang lalu487

membalas semua(1)saya akan balas

  • P粉909476457

    P粉9094764572023-08-19 12:39:09

    Anda mempunyai dua soalan, yang pertama ialah updateDirectHelper函数没有返回任何内容。虽然在这个函数中有一个return语句,但实际上它是嵌套在reduce的回调函数(updateClause, [key, value]) => {中,而不是updateDictHelper anda sendiri.

    Satu lagi soalan anda ialah bagaimana untuk mendapatkan nilai awal untuk acc提供默认值。Reduce原生支持可选的第二个参数,该参数将作为acc.

    reduce(callbackFn, initialValue)
    

    Pendekatan terbaik ialah memberikan nilai awal apabila boleh. Jika anda tidak memasukkannya, fungsi panggil balik .reduce()将跳过回调的第一个调用,并从将acc设置为数组中的第一个值开始调用回调函数,并将第二个参数设置为数组中的第二个值。如果您的数组只有一个值,例如在您的情况下,那么这个单个值就是从.reduce()调用中返回的值,并且您的.reduce() tidak akan dipanggil:

    const arrayWithOneElement = [1];
    const res = arrayWithOneElement.reduce(() => {
      console.log("I never run");
    }); // 注意没有第二个参数
    console.log(res);

    balas
    0
  • Batalbalas