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行程序可以从outterBucket
数组中删除不包含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
可能不合适,因为我们所知道的只是键“包含”了字符串。