过滤JSON以只包含所需的值

Filter JSON to contain only desired values

本文关键字:包含所 JSON 过滤      更新时间:2023-09-26

我已经做了一段时间了,我似乎不能弄清楚。我有一个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过滤器

相关文章: