这是一个有益的JavaScript重构,用于汇总一个对象数组?

时间:2017-11-08 15:55:11

标签: javascript arrays refactoring javascript-objects

这可能不是典型的问题,但我真的没有任何我认识的人来检查这个问题。我正在对其他人的代码进行一些重构,只是想要第二个意见,因为我当然认为我的工作会让它变得更好,但是你在那里得到的一些验证会有所帮助。

从这样的数组开始:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:strip-space elements="*"/>
    <xsl:output indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ComponentRef">
        <xsl:variable name="pos" select="position()"/>
        <ComponentRef SomeAttr="{/Wix/Fragment/DirectoryRef/Component[$pos]/@Name}"/>
    </xsl:template>

</xsl:transform>

并尝试获得此类结果

    <xsl:template match="ComponentRef">
        <xsl:variable name="pos"><xsl:number/></xsl:variable>
        <ComponentRef SomeAttr="{/Wix/Fragment/DirectoryRef/Component[position() = $pos]/@Name}"/>
    </xsl:template>

这是现有代码

errorLog: [{
 errorCode: 11,
 errorDescription: "abc",
 date: "2017-01-01",
 severity: "H"
},{
 errorCode: 11,
 errorDescription: "abcd",
 date: "2017-01-02",
 severity: "H"
},{
 errorCode: 99,
 errorDescription: "abcd",
 date: "2017-01-02",
 severity: "H"
}]

和我的重构:

errorSummary: [{
 errorCode: 11,
 severity: "H",
 count: 2
},{
 errorCode: 99,
 severity: "H",
 count: 1
}]

你们都在想什么?一个有用的重构?还是浪费时间?

1 个答案:

答案 0 :(得分:2)

你甚至可以走得更远:

def remove_entries(d, k):
    if k in d:
        del d[k]
    for value in d.values():
        if isinstance(value, dict):
            remove_entries(value, k)

这使它快3倍(理论上)

如果您不想过滤严重性:

def remove_from_dict_in_list(l, k):
    for i in l:
        if isinstance(i, list):
            remove_from_dict_in_list(i, k)
        elif isinstance(i, dict):
            remove_entries(i, k)

def remove_entries(d, k):
    if k in d:
        del d[k]
    for value in d.values():
        if isinstance(value, dict):
            remove_entries(value, k)
        elif isinstance(value, list):
            remove_from_dict_in_list(value, k)