2016-07-13 9 views
2

Ich habe zwei Antworten vom Server zu normalisieren und speichern sie in meinem Speicher mit normalizr. Die erste Antwort gibt mir die Abschnitte, die zweite die Beiträge. Abschnitte haben viele Beiträge. Ein Beitrag kann nur einen Abschnitt haben.Normalisieren nicht verschachtelten Baum in verschachtelt mit Normalizr

Erste Antwort (Abschnitte):

[ 
    { 
    id: 10, 
    title: "foo" 
    }, 
    ... 
] 

Zweite Antwort (Beiträge):

[ 
    { 
    id: 2, 
    sid: 10, //id of the section 
    title: "foo", 
    text: "foo foo" 
    }, 
    ... 
] 

ich die Antworten in dieses Schema normalisieren wollen:

{ 
    entities: { 
    sections: { 
     10: {title: "foo", posts: [2, 5, 12, 152]}, 
     15: {title: "example", posts: [1, 8]}, 
     ... 
    }, 
    posts: { 
     1: {id: 1, sid: 15, title: "abc", text: "something"}, 
     2: {id: 2, sid: 10, title: "foo", text: "foo foo"}, 
     ... 
    } 
    } 
} 

Sinc Die Antwort ist nicht verschachtelt. Ich weiß nicht, wie ich die Schemata definiere.

Antwort

2

Können Sie das mit einfachem Code tun? Ohne irgendeine Bibliothek? oO

var posts = [ ... ]; // some posts here 
var sections = [ ... ]; // some sections here 
var schema = { entities: { sections: {}, posts: {} } }; 

for (var i = 0; i < sections.length; i++) { 
    var section = sections[i]; 
    schema.entities.sections[section.id] = { 
     title: section.title, 
     posts: [] 
    } 
} 

for (var j = 0; j < posts.length; j++) { 
    var post = posts[j]; 
    schema.entities.posts[post.id] = post; 
    schema.entities.sections[post.sid].posts.push(post.id); 
} 
+1

Dies ist eine gute Antwort. Normalizr ist für den Umgang mit einzelnen JSON-Objekten gedacht, die entschachtelt werden müssen. Sie müssten zuerst Ihre Antworten zusammenfassen und dann normalizr ausführen. Diese Antwort ist eine viel einfachere Lösung. –

+0

@PaulArmstrong gut, eigentlich macht es Sinn, beim Denormalisieren. Wir haben eine Ruhe-API und unser JSON ist nicht tief verschachtelt, aber wir bevorzugen denormalisierte Objekte in unseren Komponenten. Es wäre großartig, einen verallgemeinerten Weg dafür zu haben – Veikedo

Verwandte Themen