在工作中遇到一个问题,服务器返回了一个数组,里面嵌套json,json里又有数组,每个数组又都是json,需要在这些json的某个字段搜索符合要求的json并且保留下来。该数组的结构如下

var arr = [
		"A": "xxxxx",
		"B": [
                "aa":"xxxxxxx",
			    "bb": "被搜索文字11"
                "aa":"xxxxxxx",
			    "bb": "被搜索文字22"
                "aa":"xxxxxx15154165",
			    "bb": "被搜索文字3232311"
		"A": "65416541545",
		"B": [
                "aa": "xxxxx",
			    "bb": "被搜索文字22呜呜呜呜"
                "aa": "xxxxx",
			    "bb": "被搜索文字22hahhahhaha"
                "aa": "xxxxx",
			    "bb": "被搜索文字22哇哦玩"

被搜索的文字就是在arr[i].B[j].bb,判断该value是否包含某个字符串,有则保留或提取出来

我想使用数组的filter方法进行过滤,因为存在嵌套,所以可以使用两次filter

var searchWord = "11"
var arr = [
// 先找出嵌套数组里所有符合要求的json
let newArray = []
arr.forEach((item,index)=>{
    newArray[index] = item
    newArray[index].B = item.B.filter((item) => {
        return item.bb.indexOf(searchWord) != -1
// 过滤掉上次过滤之后已经为空的数组
let newArray2 = newArray.filter((item)=>{
	return item.B != false
console.log("newArray:", newArray)
console.log("newArray2:", newArray2)

嗯,我想我写的代码的确非常low,还是同事的好

var searchWord = '11'
var arr = [
let newArr = []
arr.forEach((item) => {
	let res = item['B'].filter((j) => j['bb'].includes(searchWord))
	// console.log(res)
	if(res && res.length) {
	    item['B'] = res
	    newArr.push(item)
console.log("newArr", newArr)
// 运行结果
// [{ A: "xxxxx", B: [{ aa: "xxxxxxx", bb: "被搜索文字11" }, { aa: "xxxxxx15154165", bb: "被搜索文字3232311" }] }]
                    1.背景在工作中遇到一个问题,服务器返回了一个数组,里面嵌套json,json里又有数组,每个数组又都是json,需要在这些json的某个字段搜索符合要求的json并且保留下来。该数组的结构如下var arr = [	{		"A": "xxxxx",		"B": [			{                "aa":"xxxxxxx",			    "bb": "被搜索文字11"            },            {                "aa":"xxxxxx
def passed(item):
return item != "techbrood" #can be more a complicated condition here
except ValueError:
return False 
org_words = [["this","is"],["demo","from"],["techbrood"]]
words = [filter(passed, item) for 
				
虽然您可以将 Elasticsearch 用作文档存储工具,并检索文档及其元数据,但真正的强大之处在于能够轻松访问基于 Apache Lucene 搜索引擎库构建的全套搜索功能。 Elasticsearch 提供了一个简单,清楚的 REST API ,用于管理您的集群以及索引和搜索您的数据。为了进行测试,您可以轻松地直接从命令行或通过 Kibana 的 Developer Console 提交请求。在您的应用程序,您可以将 Elasticsearch 客户端采用您钟意的语言:Java,JavaScrip
文章目录一、语法二、参数名称三、注意四、用法1、单条件筛选数据2、多条件筛选数据 array.filter(function(currentValue, indedx, arr), thisValue) 二、参数名称 currentValue:必须。当前元素的值; index:可选。当前元素的索引值; arr:可选。当前元素属于的数组对象; thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。 如果省略了 thisValue ,"this"的值为 “und
在Java开发,通常需要将一个实体对象转换成Json字符串,使用FastJson来实现这种转换十分方便,只要使用FastJsonJSONObject静态类提供的toJSONString()静态方法即可。但是在转换时,我们可能需要指定使用实体对象的某些属性来进行转换,或者指定转换时要排除实体对象的某些属性。 FastJson提供的SerializeFilter类就可以实现这种需求,可以指定转换时要包含的属性,或者指定转换时要排除的属性。 JSONObject.toJSONString()默认
由于目是RESTful风格设计,前后端采用接口访问的形式,进行数据交流。 所以会涉及到json转换的问题。转换情景有四种:1、转换前过滤即在序列化实体的时候,就已经通过注释,取消了需要过滤的字段的序列化步骤。 简单点说,就是生成实体的时候,就过滤掉需要过滤的字段。 下面两个都是Jackson的注解。@JsonIgnoreProperties注解在类上//生成json时将name和age属性
使用json。当我们需要把对象集合转成jsonarray时。 往往当对象集合包含别的对象时会抛出异常。即不允许对象不能出现包含的对象(对象的一对多关系)。 我们可是使用jsonConfig的setExcludes方法排除不需要的属性。 使mybatis出现了限制。实体类  * 1 封装的自定义类型对象的时候,封装对象的那个属性  * 取决于你的自定义数据类型对象哪个属性提供了Getter方法  * **如果不想封装自定义对象的某个属性,可以将给属性的getter方法移除  * 2封装在JSONObject的自定义类型对象必须是public修饰的  * JSON提供了属性锅炉的功能  *  将自定义类型对象不想封装在JSON的属性过滤掉 let array = [ {id:'1111',name:'第一条数据',key_dict:'是'}, {id:'2222',name:'第二条数据',key_dict:'是'}, {id:'3333',name:'第三条数据',key_dict:'否'}, {id:'4444',name:'第四条数据',key_dict:'否'}, {id:'5555',na const arr = [ { id: 1, name: "宝马", state: true, pirce: 100, count: 1 }, { id: 1, name: "奥迪", state: false, pirce: 800, count: 2 }, { id: 1, name: "奔驰", state: true, pirce: 200, co
使用Jackson相关的注解时一定要注意自己定义的属性命名是否规范。 命名不规范时会失去效果。(例如Ename ,Eage 为不规范命名。“nameE”,“ageE”为规范命名)我在此处掉坑半个小时。至于命名规范,大家自己搜索。其实不要太奇葩的命名都是可以得。 如果使用@JsonIgnore注解不起效时请注意一下你的属性名字是否规范 1、@JsonIgnoreProperties 此注解是类注解,作用是json序列化时将java bean的一些属性忽略掉,序列化和反序列化都受影响。 写法将此标签加在mod
2.filter()过滤没有包含"__q_objt"的数据 let newArr = arr.filter((item) => item.val.indexOf("__q_objt") != -1); 3.将newArr的val进行拼接 let trajson = ""; for (let i = 0; i < newArr.length; i++) { trajson += "," + newArr[i].val; 可以使用`Array.prototype.map()`方法和`Array.prototype.filter()`方法结合使用过滤数组并返回符合条件元素的下标。下面是一个示例代码: ```javascript const arr = [10, 20, 30, 40, 50]; const filteredIndexes = arr.map((element, index) => ({ element, index })) .filter(({ element }) => element > 30) .map(({ index }) => index); console.log(filteredIndexes); // [3, 4] 首先使用`map()`方法将每个元素和其下标打包成一个对象,然后使用`filter()`方法过滤出大于30的元素,最后使用`map()`方法仅返回符合条件的元素下标。 这使用了箭头函数和对象解构语法,需要注意的是,`map()`和`filter()`方法返回的都是新数组,不会修改原数组