Javascript 如何从数组中删除没有包含特定字符串的字段的所有元素?

Javascript 如何从数组中删除没有包含特定字符串的字段的所有元素?,javascript,arrays,Javascript,Arrays,这是从ElasticSearch查询中获得的一些结果 "buckets": [{ "key": "another_service_name:0.0.1", "doc_count": 105, "containers": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [{ "key": "7eaf4933

这是从
ElasticSearch
查询中获得的一些结果

"buckets": [{
    "key": "another_service_name:0.0.1",
    "doc_count": 105,
    "containers": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [{
            "key": "7eaf4933b0366f7212f30f9f3c315672ea18e026922d0651b29b844763be6b0a",
            "doc_count": 105,
            "someField": {
                "value": 1.2708647376015072
            }
        }]
    }
}, {
    "key": "my_service_name:0.0.1",
    "doc_count": 200,
    "containers": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [{
            "key": "4c27931147386d49e90f581a1d5cb22f53cda00b16107864cad9eff32f61d776",
            "doc_count": 100,
            "someField": {
                "value": 77.9621390914917
            }
        }, {
            "key": "392e7e6981cd4c24c526ffda03977b7984ebcae58194680c82940af4acec4748",
            "doc_count": 100,
            "someField": {
                "value": 76.63604362487793
            }
        }]
    }
}]
是否有一个简单的1行程序可以从outter
Bucket
数组中删除不包含
my_service_name
键的任何元素

我知道我可以在阵列上循环,使用
indexOf
splice
。。但是有没有一条更短的路

我希望结果是这样的

"buckets": [{
    "key": "my_service_name:0.0.1",
    "doc_count": 200,
    "containers": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [{
            "key": "4c27931147386d49e90f581a1d5cb22f53cda00b16107864cad9eff32f61d776",
            "doc_count": 100,
            "someField": {
                "value": 77.9621390914917
            }
        }, {
            "key": "392e7e6981cd4c24c526ffda03977b7984ebcae58194680c82940af4acec4748",
            "doc_count": 100,
            "someField": {
                "value": 76.63604362487793
            }
        }]
    }
}]
一个衬里可以是这种方法,如下所示:

buckets.filter( item => /my_service_name:/i.test(item.key) );
正如lonesomeday提到的,箭头函数在Internet Explorer中不起作用(过滤器可能不起作用),要继续使用这个几乎只有一行的代码,您可以将其重写为:

buckets.filter( function(item) { return /my_service_name:/i.test( item.key ); } );
要支持Internet Explorer中的筛选器,可以使用MDN页面上提供的

var bucket=[{
“密钥”:“另一个\u服务\u名称:0.0.1”,
“doc_count”:105,
“容器”:{
“单据计数错误上限”:0,
“合计其他单据数”:0,
“桶”:[{
“键”:“7EAF4933B0366F721F30F9F3C315672EA18E026922D0651B29B844763BE6B0A”,
“doc_count”:105,
“someField”:{
“价值”:1.2708647376015072
}
}]
}
}, {
“密钥”:“我的服务名称:0.0.1”,
“文件计数”:200,
“容器”:{
“单据计数错误上限”:0,
“合计其他单据数”:0,
“桶”:[{
“键”:“4C27931147386D49E90F581A1D5CB22F53CDA00B161078864CAD9EFF32F61D776”,
“文件计数”:100,
“someField”:{
“价值”:77.9621390914917
}
}, {
“密钥”:“392E7E69811CD4C24C526FFDA03977B7984EBCAE58194680C82940AF4ACEC4748”,
“文件计数”:100,
“someField”:{
“价值”:76.63604362487793
}
}]
}
}];
log(bucket.filter(item=>/my_service_name:/i.test(item.key))一行可以是这种方法,如下所示:

buckets.filter( item => /my_service_name:/i.test(item.key) );
正如lonesomeday提到的,箭头函数在Internet Explorer中不起作用(过滤器可能不起作用),要继续使用这个几乎只有一行的代码,您可以将其重写为:

buckets.filter( function(item) { return /my_service_name:/i.test( item.key ); } );
要支持Internet Explorer中的筛选器,可以使用MDN页面上提供的

var bucket=[{
“密钥”:“另一个\u服务\u名称:0.0.1”,
“doc_count”:105,
“容器”:{
“单据计数错误上限”:0,
“合计其他单据数”:0,
“桶”:[{
“键”:“7EAF4933B0366F721F30F9F3C315672EA18E026922D0651B29B844763BE6B0A”,
“doc_count”:105,
“someField”:{
“价值”:1.2708647376015072
}
}]
}
}, {
“密钥”:“我的服务名称:0.0.1”,
“文件计数”:200,
“容器”:{
“单据计数错误上限”:0,
“合计其他单据数”:0,
“桶”:[{
“键”:“4C27931147386D49E90F581A1D5CB22F53CDA00B161078864CAD9EFF32F61D776”,
“文件计数”:100,
“someField”:{
“价值”:77.9621390914917
}
}, {
“密钥”:“392E7E69811CD4C24C526FFDA03977B7984EBCAE58194680C82940AF4ACEC4748”,
“文件计数”:100,
“someField”:{
“价值”:76.63604362487793
}
}]
}
}];
log(bucket.filter(item=>/my_service_name:/i.test(item.key))您可以使用以下方法:

在ES6中,可以将其缩短为:

let queryResults = /* your result as above */;

let myServices = queryResults.filter(element => element.key.includes('my_service_name'))
您可以使用以下方法:

在ES6中,可以将其缩短为:

let queryResults = /* your result as above */;

let myServices = queryResults.filter(element => element.key.includes('my_service_name'))

是的,但是请注意,如果您想支持IE,您需要重写此命令。@lonesomeday这当然是正确的,为此,可以使用lodash或其他类型的库(或使用mdn页面上链接的polyfill)而不是箭头函数@当然,在寂寞的日子里,我更新了答案,甚至链接到了polyfill;)是的,但是请注意,如果您想支持IE,您需要重写此命令。@lonesomeday这当然是正确的,为此,可以使用lodash或其他类型的库(或使用mdn页面上链接的polyfill)而不是箭头函数@当然,在寂寞的日子里,我更新了答案,甚至链接到了polyfill;)提示:在ES6中,您也有,或者在本例中更好,它比乱搞
indexOf()
更具表现力。谢谢,
includes
可能更好,但
startsWith
可能不合适,因为我们所知道的是键“包含”字符串。提示:在ES6中,您也有,或者在本例中更好,它的表现力要比乱搞
indexOf()
谢谢,
includes
可能更好,但是
startsWith
可能不合适,因为我们所知道的只是键“包含”了字符串。