在JavaScript中如何过滤Elastic查询,删除包含指定键的数组元素
实现方案
核心逻辑是使用数组的filter方法遍历所有查询条件,检查每个条件对象中是否存在键为指定字段(示例中为item2)的属性,保留不匹配的元素即可完成删除。
完整实现代码
let array = [ { terms: { item1: [ '1111111111111', '2222222222222', '3333333333333', '4444444444444' ] } }, { terms: { item2: [ 'aaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbb', 'ccccccccccccccccccccccc' ] } }, { range: { item3: { from: 0, to: 99999 } } } ]; // 通用删除方法:传入原数组、要删除的字段名 function removeEsQueryItem(arr, targetField) { return arr.filter(queryItem => { // 取查询类型对应的属性值,也就是存储字段名的对象 const fieldObj = Object.values(queryItem)[0]; // 检查是否包含目标字段,不包含才保留 return !fieldObj.hasOwnProperty(targetField); }) } // 调用示例:删除包含item2的元素 const newArray = removeEsQueryItem(array, 'item2'); console.log(newArray);
运行结果说明
执行后得到的newArray会自动移除包含item2的terms查询项,仅保留item1的terms查询和item3的range查询,符合Elastic查询的参数格式要求,可以直接传入ES查询接口使用。
内容的提问来源于stack exchange,提问作者yunusunver
相关产品推荐
相关产品推荐

