我正在尝试使用Lo-Dash在Angular JS中搜索JSON对象。这里的挑战是我的JSON结构将动态变化。因此,我的搜索查询字符串也必须更改。
我的JSON格式为:
{
"SERIES": "ABC000123123",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1A" },
{ "SERIES": "ABC000123456",
"SECTOR": "E",
"INDUSTRY": "N11",
"DURATION": "12" },
{ "SERIES": "ABC000456789",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1B" }
我的JSON也可以是以下格式:
{
"SERIES": "DEF000321",
"AREA": "C2",
"ITEM": "123" },
{
"SERIES": "DEF000321",
"AREA": "D0",
"ITEM": "675" },
关键区域,项目,行业,行业等将有所不同。
在所有上述情况中,只有SERIES字段保持不变。 我需要传入其余属性的键值对来检索SERIES值。
为简单起见,我在搜索上述JSON时使用lodash的方法如下:
_.map(_.filter(JSON_Object, function (value) {
return (value.AREA == D0) && (value.ITEM == C2) }), 'SERIES');
我以编程方式生成以下字符串:
(value.AREA ==' D0')&& (value.ITEM ==' C2')
这种方法不起作用。 当我对值进行硬编码时,它可以正常工作。当我以编程方式生成查询字符串时,反之则不然。
我尝试迭代列表并一次过滤掉一个属性,但这会增加循环次数和搜索的复杂性。
有任何建议/解决方法吗?提前致谢
编辑:添加了控制台的屏幕截图: enter image description here
答案 0 :(得分:0)
尝试这种方法:https://fiddle.jshell.net/koljada/53esaqLz/1/
var JSON_Object = [{
"SERIES": "ABC000123123",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1A"
}, {
"SERIES": "ABC000123456",
"SECTOR": "E",
"INDUSTRY": "N11",
"DURATION": "12"
}, {
"SERIES": "ABC000456789",
"SECTOR": "E",
"INDUSTRY": "N31",
"DURATION": "1B"
}];
var query = "(value.SECTOR == 'E') && (value.INDUSTRY == 'N11')";
var result = _(JSON_Object)
.filter(new Function("value", "return " + query))
.map('SERIES')
.value(); // => ["ABC000123456"]