以静态方法映射json数组(Angular2 + TS)

时间:2016-09-14 13:26:36

标签: arrays json angular typescript mapping

在静态方法中获取映射输入数据的语法是正确的。我的json数组看起来像这样:

[
    {
        "documents": [
            {
                "title": "+1 (film)",
                "is-saved": false,
                "abstract": "some text",
                "id": "_1__film_",
                "url": "some url"
            }
        ]
    }
]

该数组中的每个项目都是Result

作为参考映射一个结果的示例,我知道该怎么做:

static resultFromJSON(json): Result {
    let documents: SearchQueryDocument[] =
        json.documents.map(doc => new SearchQueryDocument(doc.title, doc.issaved, doc.abstract, doc.id, doc.url))
        return new Result(documents)
}

但是我需要映射整个数组,所以我该怎么做?

static resultsFromJSON(json): Result[] {
    let results: Result =
    json.map ... // what here? 
}

映射一个结果我可以使用json.documents.map...但映射整个数组它没有" name"使用......

也许是来自新手的愚蠢问题,但任何帮助都表示赞赏!

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么你的json对应于以下界面:

interface IDocument {
    title: string;
    "is-saved": boolean;
    "abstract": string;
    id: string;
    url: string;
}

interface IResult {
    documents: Document[];
}

然后你有一个Result数组 要映射那个json,你可以这样做:

static resultsFromJSON(json): Result[] {
    return json.map(obj => {
        new Result(obj.documents.map(doc => {
            return new SearchQueryDocument(doc.title, doc.issaved, doc.abstract, doc.id, doc.url);
        }));
    });
}

答案 1 :(得分:0)

对我有用的解决方案只是对Nitzan Tomer的上述静态方法稍作改动。

这有效:

static resultsFromJSON(json): Result[] {
    return json.map(obj => 
        new Result(obj.documents.map(doc => 
            new SearchQueryDocument(doc.title, doc.issaved, doc.abstract, doc.id, doc.url)
        ))
    )
}