过滤嵌套的 JSON JavaScript
Filtering nested JSON javascript
我正在创建一个采用如下JSON的API:
"hightlights":[
{
"title":"Fun",
"url":"fun/index.html",
"queries":
[
"music",
"artists",
"events",
"internet"
]
},
{
"title":"Internet",
"url":"internet/index.html",
"queries":
[
"javascript",
"web",
"internet",
]
}
]
我需要使用用户给出的单词过滤 JSON,并使用另一个 JSON 返回,该 JSON 仅包含"查询"中的单词。
If word === 'music', receive:
{
"title":"Fun",
"url":"fun/index.html",
"queries":[
"music",
"artists",
"events",
"internet"
]
}
If word === 'internet', receive:
{
{
"title":"Fun",
"url":"fun/index.html",
"queries":[
"music",
"artists",
"events",
"internet"
]
},
{
"title":"Internet",
"url":"internet/index.html",
"queries":[
"javascript",
"web",
"internet",
]
}
我的问题是如何嵌套这些值?如果有人可以给我举一些例子...我会很感激...
尝试以下操作:
function getResult(filterBy, objList) {
return objList.hightlights.filter(function(obj) {
return obj.queries.some(function(item){
return item.indexOf(filterBy) >= 0;
});
});
}
输入#1:
getResult("internet", yourObject);
输出 #1:
[{"title":"Fun","url":"fun/index.html","queries":["music","artists","events","internet"]},{"title":"Internet","url":"internet/index.html","queries":["javascript","web","internet"]}]
输入 #2:
getResult("music", yourObject);
输出 #2:
[{"title":"Fun","url":"fun/index.html","queries":["music","artists","events","internet"]}]
var xyz = {
"hightlights":[
{
"title":"Fun",
"url":"fun/index.html",
"queries":[
"music",
"artists",
"events",
"internet"
]
},
{
"title":"Internet",
"url":"internet/index.html",
"queries":[
"javascript",
"web",
"internet",
]
}
]
}
不,假设"var word"包含要搜索的关键字,那么您可以简单地这样做:
var arr = [];
for(var i in xyz['highlights']){
var queries = xyz['highlights']['queries'];
for(j in queries){
if (word == queries[j]){
arr.push(xyz['highlights'][i]);
continue;
}
}
}
arr 应该有你所需的对象。对不起,这是非常基本的。但希望它有帮助。
var search = function(data, query) {
return data.hightlights.filter(function(highlight) {
return highlight.queries.indexOf(query) > -1;
});
}
search(data, "music");
如果你有一个可用的curry
函数(如Ramda,Lo-Dash等(,你可以包装它:
var search = curry(function(data, query) { ... });
然后,您可以通过先传入数据来创建更简单的函数:
highlights = search(data);
//...
highlights("music"); //=> those containing "music"
highlights("internet"); //=> those containing "internet"
更新
我知道已经有一个可行的解决方案。 但这可能更简单一些。
这将在查询中搜索子词:
var search = function(data, query) {
return data.hightlights.filter(function(highlight) {
return highlight.queries.filter(function(q) {
return q.indexOf(query) > -1;
}).length > 0;
});
}
相关文章:
- Javascript JSON.parse not working
- Javascript:JSON请求仅在第一次工作
- 定义this.properties或objectName.properties的javascript JSON对象
- Javascript/JSON警报返回Undefined
- 使用XPath样式访问Javascript JSON对象属性
- JavaScript JSON关联对象键和值都作为日期时间戳
- Javascript-JSON-嵌套和分组
- Javascript json返回未定义
- 无标题Javascript JSON数组->CSV导出
- Javascript JSON对象替换对象中的字符串
- Javascript/Json日期转换问题
- 使用jstl c:forEach在迭代jsp bean上创建javascript json对象
- 为什么我的JavaScript / JSON脚本不能在Internet Explorer中工作
- 将数据从 Python 发送到 Javascript (JSON)
- JavaScript Json 值追加基于相等条件
- 在设置用户后,从 JavaScript JSON 请求中获取 Web 服务 (asmx) ASP.NET Windows
- JavaScript - JSON 数据结构的构建 - 如何使用变量值更改键名
- Javascript JSON 解析和字符串化用于多级
- 如何将数据 php 更改为 javascript json
- Javascript JSON 到 Excel 文件下载