Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/JSON对象数组搜索问题_Javascript_Arrays_Json_Search - Fatal编程技术网

Javascript/JSON对象数组搜索问题

Javascript/JSON对象数组搜索问题,javascript,arrays,json,search,Javascript,Arrays,Json,Search,我试图搜索结果(从soapapi调用中得到的结果),我认为这是一个Javascript对象数组,因为它不遵循JSON标准 以下是数据示例: [ { '$': { uuid: '{461F892D-07D8-4FCA-AF86-D5A9CBB080B8}' }, pattern: [ '*689XXXX' ], description: [ 'DHHS_62' ], routePartitionName: [ 'DHHS_62-PT' ] }, { '$': { uui

我试图搜索结果(从soapapi调用中得到的结果),我认为这是一个Javascript对象数组,因为它不遵循JSON标准

以下是数据示例:

[ { '$': { uuid: '{461F892D-07D8-4FCA-AF86-D5A9CBB080B8}' },
    pattern: [ '*689XXXX' ],
    description: [ 'DHHS_62' ],
    routePartitionName: [ 'DHHS_62-PT' ] },
  { '$': { uuid: '{84651C57-5E4C-4981-B859-38C8ECC56E3B}' },
    pattern: [ '*745XXXX' ],
    description: [ 'DHHS_43' ],
    routePartitionName: [ 'DHHS_43-PT' ] },
  { '$': { uuid: '{BC3259C4-38DB-4AD6-8594-61B938E4542C}' },
    pattern: [ '*753XXXX' ],
    description: [ 'DEQ_50' ],
    routePartitionName: [ 'DEQ_50-PT' ] },
  { '$': { uuid: '{4CF32D54-BED2-4167-A5E8-E0206520218A}' },
    pattern: [ '*7XXXXXXX' ],
    description: [ 'DNR_21' ],
    routePartitionName: [ 'DNR_21-PT' ] } ]
我曾尝试使用NPM模块,但都不起作用。我相信我查询数据时不是做错了什么,就是有脏数据需要清理

谁能证实:

  • 数据是JS数组还是脏数据
  • 使用逻辑的查询。(如果“routePartitionName”=“DHHS_62-PT”,则返回“pattern”

  • 我想我在这件事上有点不知所措,似乎找不到回去的路了。我感谢任何帮助或建议!

    提供的javascript是有效的。下面是一个过滤函数,它遍历整个对象并返回一组为给定routeParameterName找到的模式

    测试数据

    const obj = [{
            '$': {
                uuid: '{461F892D-07D8-4FCA-AF86-D5A9CBB080B8}'
            },
            pattern: ['*689XXXX'],
            description: ['DHHS_62'],
            routePartitionName: ['DHHS_62-PT']
        },
        {
            '$': {
                uuid: '{84651C57-5E4C-4981-B859-38C8ECC56E3B}'
            },
            pattern: ['*745XXXX'],
            description: ['DHHS_43'],
            routePartitionName: ['DHHS_43-PT']
        },
        {
            '$': {
                uuid: '{BC3259C4-38DB-4AD6-8594-61B938E4542C}'
            },
            pattern: ['*753XXXX'],
            description: ['DEQ_50'],
            routePartitionName: ['DEQ_50-PT']
        },
        {
            '$': {
                uuid: '{4CF32D54-BED2-4167-A5E8-E0206520218A}'
            },
            pattern: ['*7XXXXXXX'],
            description: ['DNR_21'],
            routePartitionName: ['DNR_21-PT']
        },
        {
            '$': {
                uuid: '{4CF32D54-BED2-4167-A5E8-E0206520218A}'
            },
            pattern: ['*6XXXXXX'],
            description: ['DNR_21'],
            routePartitionName: ['DNR_21-PT']
        }
    ];
    
    作用

    function filter(data, key) {
        var patterns = [];
    
        for (var i = 0; i < data.length; i++) {
            var routePartitionNames = data[i].routePartitionName;
            var currentPatterns = data[i].pattern;
    
            if (!Array.isArray(routePartitionNames) ||
                routePartitionNames.length === 0 ||
                routePartitionNames.indexOf(key) < 0
            ) {
                continue;
            }
    
            // key found in current routePartitionName
            for (var j = 0; j < currentPatterns.length; j++) {
                var currentPattern = currentPatterns[j];
                if (patterns.indexOf(currentPattern) < 0) {
                    patterns.push(currentPattern);
                }
            }
        }
        return patterns;
    }
    
    功能过滤器(数据、键){
    var模式=[];
    对于(变量i=0;i
    用法:
    filter(数据,'DNR\u 21-PT')
    返回:
    [“*7XXXXXXX”、“*6XXXXXX”]

    您可以使用它根据
    routePartitionName
    过滤对象,然后将其传递给a以获得所需的模式。可能有更好的方法,这只是快速而肮脏

    const obj=[{'$':{uuid:'{461F892D-07D8-4FCA-AF86-D5A9CBB080B8}},
    图案:['*689XXXX'],
    说明:['DHHS_62'],
    routePartitionName:['DHHS_62-PT']},
    {'$':{uuid:{84651C57-5E4C-4981-B859-38C8ECC56E3B}},
    图案:['*745xxx'],
    说明:['DHHS_43'],
    routePartitionName:['DHHS_43-PT']},
    {'$':{uuid:{BC3259C4-38DB-4AD6-8594-61B938E4542C}},
    图案:['*753xxx'],
    说明:['DEQ_50'],
    routePartitionName:['DEQ_50-PT']},
    {'$':{uuid:{4CF32D54-BED2-4167-A5E8-E0206520218A},
    图案:['*7XXXXXXX'],
    说明:['DNR_21'],
    routePartitionName:['DNR_21-PT']}]
    让obj2=obj.filter(item=>item.routePartitionName=='DHHS_62-PT').map(id=>id.pattern);
    
    console.log(obj2)
    它不遵循什么标准它是一个JSON数组。你可以添加一个,你的一个尝试访问数组,这样有人可以改进它。它是一种脏数据,你可以更改
    模式
    描述
    路由分区名
    可以更改为字符串。如果你可以清理数据格式,那么你可以得到一个clear对于查询的想法。你反对用循环来迭代数组以查找该值吗?谢谢大家的帮助!Nikolaus,我的理解是,它最初是XML,已经被转换为JS数组。我只是二手数据。Gamsh,那么你是说条目应该是这样的?{pattern:'9.19005554444',description:'Sample Outbound Call Block',routePartitionName:'Blocked'}Matt,不,一点也不反对。以下是我使用数组查询的尝试:以及我使用json查询的尝试:谢谢你的帮助!我喜欢你的函数。我有另一个数据集,我在上面运行它会返回多个结果。keymotoe提供的脚本会返回这些多个结果。这一个只返回1个结果。有没有如何返回多个?非常感谢。但是,我尝试了代码,它仍然只返回了一个结果。我也复制并粘贴了您的更新代码。有什么想法吗?可能我误解了您的问题。是否存在多个具有相同routePartitionName的对象?是否要返回
    所有模式
    对于
    所有对象
    在哪里设置了特定的routePartitionName?如果我不清楚,很抱歉。我的不好。确实,是的,有多个对象具有相同的routePartitionName。另外,是的,返回设置了特定routePartitionName的所有对象的所有模式。非常感谢!我非常感谢!@AndrewPetersen如果这个答案解决了您的问题,请继续单击复选标记表示接受。这可以让其他用户在继续搜索时知道问题的答案。