Gabungkan dua tatasusunan objek dinamik: Cantumkan dua tatasusunan objek dinamik menjadi satu
P粉903969231
P粉903969231 2023-08-18 14:53:48
0
1
483
<p>Saya mempunyai tatasusunan dinamik dua objek seperti yang ditunjukkan di bawah (ini ialah tatasusunan dinamik bagi n objek): </p> <pre class="brush:php;toolbar:false;">serverArray = [ {"id":"field1","mandatory":false,"visible":false}, {"id":"field2","mandatory":false,"visible":false}, {"id":"field3","mandatory":false,"visible":false}, {"id":"field4","mandatory":false,"visible":false} ] localArray = [ {"id":"field1"}, {"id":"field2","mandatory":false}, {"id":"field3","mandatory":true,"visible":false}, {"id":"field4","mandatory":false,"visible":true}, {"id":"field5","mandatory":false,"visible":true}, {"id":"field6","mandatory":true,"visible":false}, ]</pre> <p>Saya menggabungkan dua tatasusunan menjadi objek dengan ID yang sama seperti ini: </p> <pre class="brush:php;toolbar:false;">for (biar x = 0; x < serverArray.length; x++) { untuk (biar y = 0; y < localArray.length; y++) { if (serverArray[x].id == localArray[y].id) { // serverArray[x].id/localArray[y].id = 'field1', 'field2' for (let key in localArray[y]) { //key = 'id', 'mandatory', dsb serverArray[x][key] = localArray[y].hasOwnProperty(key) ? localArray[y][key] : serverArray[x][key]; } } } }</pre> <p>Walau bagaimanapun, saya juga ingin memasukkan dalam <code>serverArray</code> ID yang tiada dalam <code>serverArray</code> (iaitu <code>field5</ dalam contoh kod di atas>, <kod>field6</code>), dan medan ini juga akan gagal dalam keadaan di atas (iaitu <kod>serverArray[x].id == localArray[y].id</code>), Saya harap Medan ini turut disertakan sebagai sebahagian daripada <code>serverArray</code>, iaitu <code>serverArray</code> juga harus mengandungi dua objek berikut: </p> <pre class="brush:php;toolbar:false;">{"id":"field5","mandatory":false,"visible":true}, {"id":"field6","mandatory":true,"visible":false},</pre> <p>Adakah terdapat sebarang cara untuk mencapai keperluan ini? </p>
P粉903969231
P粉903969231

membalas semua(1)
P粉330232096

Semasa menggelung melalui kedua-dua tatasusunan, anda boleh mencipta objek baharu untuk menjejaki medan yang digabungkan. Selepas penggabungan awal, anda boleh mengulangi localArray sekali lagi untuk mengenal pasti medan yang belum digabungkan ke dalam serverArray dan menambahnya pada hasil gabungan.

let mergedFields = {};

// 根据共同的ID进行初始合并
for (let y = 0; y < localArray.length; y++) {
    const localField = localArray[y];
    const serverField = serverArray.find(field => field.id === localField.id);

    if (serverField) {
        mergedFields[localField.id] = {
            ...serverField,
            ...localField
        };
    } else {
        mergedFields[localField.id] = localField;
    }
}

// 添加在mergedFields中不存在的剩余localArray字段
for (let y = 0; y < localArray.length; y++) {
    const localField = localArray[y];
    if (!mergedFields.hasOwnProperty(localField.id)) {
        mergedFields[localField.id] = localField;
    }
}

// 将mergedFields对象转换回数组
const mergedServerArray = Object.values(mergedFields);

console.log(mergedServerArray);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan