为值的子字符串过滤JSON响应

时间:2019-12-09 07:51:29

标签: javascript json

我正在运行一个OCR作业,该作业以JSON格式的响应返回所有检测到的文本。 摘录在这里:

     { BlockType: 'WORD',
       Confidence: 99.76903533935547,
       Text: 'SALES',
       Geometry: [Object],
       Id: '5ec23a08-9414-4b5c-99e7-1eae56bdc50a' },
     { BlockType: 'WORD',
       Confidence: 99.61475372314453,
       Text: 'TAX',
       Geometry: [Object],
       Id: '564594a4-32d6-4a24-aaf6-76ac2794dfbb' },
     { BlockType: 'WORD',
       Confidence: 98.65728759765625,
       Text: '-7.94',
       Geometry: [Object],
       Id: 'f9c94902-4807-43a2-b834-b68d52f00efc' },
     { BlockType: 'WORD',
       Confidence: 99.82821655273438,
       Text: 'TOTAL',
       Geometry: [Object],
       Id: '8515e57f-fe6f-4c13-b2d0-c0dcb82333bb' },      
     { BlockType: 'WORD',
       Confidence: 98.82560729980469,
       Text: '-$140.32',
       Geometry: [Object],
       Id: 'e7ba0d15-678a-4b30-a764-0a41d7f89f29' },
    { BlockType: 'LINE',
        Confidence: 96.75798797607422,
        Text: 'CASHIER: JSMITH',
        Geometry: { BoundingBox: [Object], Polygon: [Array] },
        Id: 'f50c8a71-6954-428f-8d61-8a143194befd',
        Relationships: [ [Object] ] }

我需要过滤出"matches"某个前缀字符串的字段。

对于完全匹配的字段,它们非常适用...

var data2 = data.filter(d => d.Text == 'SALES');

var data2 = data.filter(d => d.Text == 'TAX');

但对于CASHIER字段来说却不是很多。

我尝试了几种方法...无济于事..包括。

var data2 = data.filter(d => d.Text.includes('CASH') );

var data2 = data.filter(d => d.Text.match('CASH') );

任何不是比较运算符的东西都会产生这种类型的错误...

TypeError: Cannot read property 'includes' of undefined

关于如何在"like 'CASH' "上进行JSON过滤的任何想法?

2 个答案:

答案 0 :(得分:1)

您肯定会遇到错误,因为数据文本键中的值将为null或未定义

因此您可以修改代码以归档所需的结果。

var data2 = data.filter(d => d.Text && d.Text.startsWith('CASH'));

答案 1 :(得分:0)

尝试一下:

var data = [{
		"Text": "SALES"
	},
	{
		"Text": "TAX"
	},
	{
		"Text": "-7.94"
	},
	{
		"Text": "TOTAL"
	},
	{
		"Text": "-$140.32"
	},
	{
		"Text": "CASHIER: JSMITH"
	}
];

var res = data.filter(d => d.Text.startsWith('CASH'));

console.log(res);