Javascript/JSON 对象数组搜索问题

标签 javascript arrays json search

我正在尝试搜索结果(我从 SOAP API 调用返回),我认为这是一个 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 模块 array-queryjson-query并且都不起作用。我相信我在查询数据时做错了什么,或者我有需要清理的脏数据。

任何人都可以验证:

  1. 数据是 JS 数组还是脏数据?
  2. 使用逻辑的查询。 (如果“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;
}

用法:过滤器(数据,'DNR_21-PT') 返回:["*7XXXXXXX", "*6XXXXXX"]

关于Javascript/JSON 对象数组搜索问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47417500/

相关文章:

java - 将 int 数组的内容输出到屏幕的通用方法?

javascript - jQuery $.ajax 调用——奇怪的返回函数问题

javascript - 更改 AngularJS UI-Router 中的导航状态

Javascript 拆分字符串

c - 在 C 中通过 TCP/IP 发送和接收字节数组

c - 如何只检查一次输入,而不是挂起等待输入

database - CouchDB JSon 响应定制

javascript 代码未获取第一条记录的 code_description 值

javascript - 我将如何/在 Node 中使用什么来抓取 <video> src?

javascript - 停止 Internet Explorer 8 页面滚动