【问题标题】:Sorting of Arrays in Object with recursive search使用递归搜索对对象中的数组进行排序
【发布时间】:2015-12-10 15:57:47
【问题描述】:

我正在尝试使用 Node.js 按名称对 JSON 对象中的每个数组进行排序。 我设法使用 Underscore.js 仅对数组进行排序,但是如何输入整个对象并让对象返回完成排序?

考虑递归地查看对象以查找数组并对它们中的每一个进行排序,但我该怎么做呢?

这是一个仅对数组进行排序的示例对象:

    var _ = require("./underscore.js")
    var jsonObject = {  "Configuration":{  
          "$":{  
             "xmlns":"http://www.example.com/"
          },
          "ApplicationInstance":{  
             "Description":"Description text here.",
             "Name":"Server1",
             "Class":"System",
             "Visibility":"System",
             "CustomerCreated":"0",
             "Active":"0",
             "IntroducedIn":{  
                "$":{  
                   "xsi:nil":"true",
                   "xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"
                }
             },
             "Property":[  
                {  
                   "Description":"JMS publisher destination type.",
                   "Name":"jmsJBossPublisher.destinationType",
                   "Class":"System",
                   "Visibility":"System",
                   "LanguageIndependantDescriptionKey":"ActivityGateway-JMSSenderConfiguration.jmsJBossPublisher.destinationType.DESCKEY",
                   "LanguageIndependantNameKey":"ActivityGateway-JMSSenderConfiguration.jmsJBossPublisher.destinationType.NAMEKEY",
                   "CustomerCreated":"1",
                   "Active":"0",
                   "IntroducedIn":"1.1",
                   "AttributeValue":"QUEUE",
                   "AttributeDataTypeName":"String"
                },
                {  
                   "Description":"jmsConnectionFactory properties.",
                   "Name":"jmsConnectionFactory.jndiNameForJmsConnectionFactory",
                   "SecurityClass":"System",
                   "Visibility":"System",
                   "LanguageIndependantDescriptionKey":"ActivityGateway-JMSSenderConfiguration.jmsConnectionFactory.jndiNameForJmsConnectionFactory.DESCKEY",
                   "LanguageIndependantNameKey":"ActivityGateway-JMSSenderConfiguration.jmsConnectionFactory.jndiNameForJmsConnectionFactory.NAMEKEY",
                   "CustomerCreated":"1",
                   "Active":"0",
                   "IntroducedIn":"1.1",
                   "AttributeValue":"ConnectionFactory",
                   "AttributeDataTypeName":"String"
                }
             ],
             "ServerId":"1",
             "ApplicationName":"ActivityGateway",
             "InstanceID":"1"
          }
       }
    };
    console.log(_.sortBy(jsonObject.Configuration.ApplicationInstance.Property,'Name'))

【问题讨论】:

    标签: javascript arrays node.js object


    【解决方案1】:

    _.sortBy 返回一个克隆数组,因此您需要覆盖之前的值。 尝试添加这一行:

    jsonObject.Configuration.ApplicationInstance.Property = _.sortBy(jsonObject.Configuration.ApplicationInstance.Property,'Name')
    

    【讨论】:

    • 这行得通。现在如何在对象中的所有几个数组上递归执行此操作?
    • 您要么需要为每一个手动执行此操作,要么遍历 json 树查找数组(非常低效)。我建议你手动完成。
    • 我有 700 多个文件和几个数组,每年必须这样做 2-3 次,所以手动方式会花费很多时间。
    • 哦,好的。你知道编程中的递归吗?