使用lodash javascript筛选子集合
Filtering child collections using lodash javascript
我有一个服务,它返回以下JSON
'data': [{
'category': {
'Questions': [{
aswers: [{
Text: 'Text1'
}],
Data: 'TT'
}],
name: 'name1'
}
}, {
'category': {
'Questions': [{
aswers: [{
Text: 'Text1'
}],
Data: 'TT'
}],
name: 'name1'
}
}, {
'category': {
'Questions': [{
aswers: [{
Text: 'Text1'
}],
Data: 'TT'
}],
name: 'name1'
}
}]
我想使用基于父集合和子集合的lodash编写一个过滤器查询。
where类别。问题.data=="xxx"和类别。Questions.aswers.Text='dd'
我尝试了以下查询
var x= _.filter(data.category, {Questions: [{Data: 'xxx', 'Questions.aswers.Text':'ddd'}] });
之后我想更新答案的值。为所选对象添加文本。
关系船是数据具有类别对象的集合category对象具有答案对象的集合answers对象具有文本对象的集合
我怎样才能做到这一点?
这有点棘手,但以下是如何做到这一点。
let matchingQuestions = _.chain(jsonData.data)
.map(d => d.category.Questions) //So we have array of Questions arrays
.flatten() //Now we have a single array with all Questions
.filter({Data: 'xxx'}) //Filtering by Data
.map('aswers') //After this we will have an array of answers arrays
//(only answers with matching Data definitely)
.flatten() //A single array with all answers
.filter({Text: 'ddd'}) //Now filtering by Text
.value(); //Unwrapping lodash chain to get the result
//Now you can update them however you want
_.each(matchingQuestions, q => q.Text = 'Updated Text');
下面是一个带有工作示例的jsbin。我用了lodash v4。
相关文章:
- 使用AngularJS中的筛选器更新给定的表
- 淘汰搜索/筛选
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- Angular JS Filter-通过3个复选框进行筛选
- 使用下拉列表筛选列表(ul>li)
- 在Javascript中列出顺序子集元素
- 对象拟合:获取结果尺寸
- JQuery DataTable列筛选器-选择下拉筛选器
- Regex,用于从字符串中筛选关键字
- 使用多个条件筛选ng个重复
- 在筛选网格期间,网格负载掩码不起作用
- 接下来选择与筛选器匹配的选项
- 可以't从AJAX请求中筛选数据
- 把两种不同的形式合为一
- 如何从另一个带下划线的数组中筛选带元素的数组
- 动态更改Webkit筛选器值
- 如何使用重复的 id 保存子集合的元素
- 节点.js / 猫鼬 - 从子集合中添加、更新和删除项目
- 如何在主干中转换具有子集合的集合.js
- 函数:为什么主干集合中的所有子集合都在更新