我正在尝试搜索结果(我从 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-query和 json-query并且都不起作用。我相信我在查询数据时做错了什么,或者我有需要清理的脏数据。
任何人都可以验证:
- 数据是 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;
}
用法:过滤器(数据,'DNR_21-PT')
返回:["*7XXXXXXX", "*6XXXXXX"]
关于Javascript/JSON 对象数组搜索问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47417500/