suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Zwei dynamische Objektarrays zusammenführen: Zwei dynamische Objektarrays zu einem zusammenführen

<p>Ich habe ein dynamisches Array aus zwei Objekten, wie unten gezeigt (dies ist ein dynamisches Array aus n Objekten): </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>Ich habe die beiden Arrays wie folgt zu einem Objekt mit derselben ID zusammengeführt: </p> <pre class="brush:php;toolbar:false;">for (let x = 0; x < serverArray.length; x++) { for (let 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' usw serverArray[x][key] = localArray[y].hasOwnProperty(key) ? localArray[y][key] : serverArray[x][key]; //Überschreibung mit lokalem Feldattributwert (falls vorhanden) in der endgültigen zurückgegebenen Antwort } } } }</pre> <p>Ich möchte jedoch auch diejenigen IDs in das endgültige <code>serverArray</code> aufnehmen, die nicht in <code>serverArray</code> enthalten sind (d. h. <code>field5</ im Beispiel). obiger Code>, <code>field6</code>), und diese Felder erfüllen auch die obige Bedingung nicht (d. h. <code>serverArray[x].id == localArray[y].id</code>), Ich hoffe, dass diese Felder auch Teil des endgültigen <code>serverArray</code> sind, d. h. mein endgültiges <code>serverArray</code> sollte auch die folgenden zwei Objekte enthalten: </p> <pre class="brush:php;toolbar:false;">{"id":field5","mandatory":false,"visible":true}, {"id":field6,"mandatory":true,"visible":false},</pre> <p>Gibt es eine Möglichkeit, diese Anforderung zu erfüllen? </p>
P粉903969231P粉903969231469 Tage vor484

Antworte allen(1)Ich werde antworten

  • P粉330232096

    P粉3302320962023-08-19 13:04:50

    在循环遍历两个数组时,您可以创建一个新对象来跟踪合并的字段。在初始合并之后,您可以再次遍历localArray,以识别尚未合并到serverArray中的字段,并将它们添加到合并结果中。

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

    Antwort
    0
  • StornierenAntwort