我已经做了一段时间了,我似乎不能弄清楚。我有一个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要长得多,但这段代码可以让我明白我的意思。所以我想做一个过滤器只显示以"Search"开头的或者只显示以"Booklet"开头的。我需要与之相关的所有数据,因为我要创建一个表,所以是否有可能基于此创建一个新的JSON ?或者我该怎么做呢?
这是我尝试过的小提琴:http://jsfiddle.net/xjcfw7zf/
任何帮助都非常感谢!谢谢你! !
要过滤以"Booklet"开头的对象,可以执行以下命令
jsonData = jsonData.filter(function(obj){
return (obj.timerName.indexOf("Booklet") == 0)
});
参考- http://jsfiddle.net/xjcfw7zf/3/
注意—为了更通用,您也可以使用一个变量来代替"Booklet"
使用.filter()和. indexof。Filter将根据条件遍历每个对象和Filter。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);
如何使用for循环迭代JSON对象中的主数组,在当前迭代对象的timerName属性上使用子字符串执行比较,然后将其放入匹配的结果数组中,最后才返回该数组?
/**
* @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;
}
使用lodash之类的库,根据您试图查找的键和值进行过滤,在lodash中,您可能希望使用"pluck"来查找您要查找的内容。Lodash是一个非常有用的库,它使你能够用JSON对象和javascript做各种各样的事情。
https://lodash.com/docs过滤器