我已经在这方面工作了一段时间,我似乎无法弄明白。我有一个JSON,我从链接中提取,我正在尝试创建一个过滤器,以便只显示以某个关键字开头的名称。
我一直在尝试使用.parseJson
而且我已经尝试了str.includes()
,但我似乎无法正常工作。
这是JSON的一部分:
[
{
"max_percentile_90th": 42142.1,
"daily_percentile_50th": 21334.5,
"timerName": "Booklet:Landscape",
"sparks": [
26651,
23801.2,
20850.8,
19157.4,
21198.5,
],
},
{
"max_percentile_90th": 59253.4,
"daily_percentile_50th": 9040.5,
"timerName": "Search:Blog",
"sparks": [
9248.1,
13653,
8277,
9532.2,
10912.4,
],
},
{
"max_percentile_90th": 16707.9,
"daily_percentile_50th": 3793,
"timerName": "Search:Records:Download",
"sparks": [
6257.6,
8269,
9395.4,
6211.4,
9420.7,
],
},
{
"max_percentile_90th": 6979.4,
"daily_percentile_50th": 2821,
"timerName": "Search:AfterEffects",
"sparks": [
3752.2,
4522.8,
6167.2,
3847.9,
4568.9,
],
},
{
"max_percentile_90th": 5900.8,
"daily_percentile_50th": 2323,
"timerName": "Booklet:Geneologies",
"sparks": [
3359.2,
3317.8,
3113.5,
2839,
2675.6,
],
}
]
正如你所看到的那样,timerName在其中两个上面带有“Booklet”(但后面有不同的东西),并在其中三个上面以“Search”开头。 JSON要长得多,但这个片段会让我的观点更加突出。所以我想制作一个过滤器,它只显示以“搜索”开头的过滤器或仅显示以“小册子”开头的过滤器。我需要与它相关的所有数据,因为我正在创建一个表,所以有可能基于它创建一个新的JSON吗?或者我应该怎么做呢?
这是我尝试过的小提琴:http://jsfiddle.net/xjcfw7zf/
非常感谢任何帮助!谢谢!!
答案 0 :(得分:1)
使用.filter()和.indexOf。过滤器将迭代每个对象并根据条件进行过滤。 indexOf将告诉字符串中是否存在给定的键。
function search(data, key) {
return data.filter(function(item) {
return item.timerName.indexOf(key) == 0;
});
}
var jsonData = [{
"max90th": 42142.1,
"daily90th": 21334.5,
"timerName": "Booklet:Landscape",
"sparks": [
26651,
23801.2,
20850.8,
19157.4,
21198.5,
],
}, {
"max90th": 59253.4,
"daily90th": 9040.5,
"timerName": "Search:Blog",
"sparks": [
9248.1,
13653,
8277,
9532.2,
10912.4,
],
}, {
"max90th": 16707.9,
"daily90th": 3793,
"timerName": "Search:Records:Download",
"sparks": [
6257.6,
8269,
9395.4,
6211.4,
9420.7,
],
}, {
"max90th": 6979.4,
"daily90th": 2821,
"timerName": "Search:AfterEffects",
"sparks": [
3752.2,
4522.8,
6167.2,
3847.9,
4568.9,
],
}, {
"max90th": 5900.8,
"daily90th": 2323,
"timerName": "Booklet:Geneologies",
"sparks": [
3359.2,
3317.8,
3113.5,
2839,
2675.6,
],
}];
function search(data, key) {
return data.filter(function(item) {
return item.timerName.indexOf(key) == 0;
});
}
alert(search(jsonData, "Booklet").length);
alert(search(jsonData, "Search").length);
alert(search(jsonData, "Something").length);

答案 1 :(得分:1)
过滤以"小册子"开头的对象可以通过以下方式实现
jsonData = jsonData.filter(function(obj){
return (obj.timerName.indexOf("Booklet") == 0)
});
供参考 - CEN XFS standard
注意 - 为了更通用,您也可以使用变量代替" Booklet"
答案 2 :(得分:0)
使用像lodash这样的库来根据你想要找到的键和值进行过滤,在lodash中你想要使用" pluck"为了你所追求的。 Lodash是一个非常有用的库,它可以让你用JSON对象和javascript来做各种各样的事情。
答案 3 :(得分:0)
如何使用for循环遍历JSON对象中的主数组,在当前迭代对象的timerName属性上使用substring进行比较,然后在匹配时将其放入结果数组中,返回那个数组?
/**
* @param {array} json
* @param {string} filter
*/
function itemsByTimerName(json, filter) {
var filtered = [];
for (var i = 0; i < json.length; ++i) {
// if 'timerName' begins with 'filter'
if (json[i].timerName.substring(0, filter.length) === filter) {
filtered.push(json[i]);
}
}
return filtered;
}