javascript - 如何使用 Lodash 访问父对象和匹配的子对象?
问题描述
我想用lodash获取父对象值和所有ischecked标志为true的孩子。
这是我到目前为止所拥有的:
responsetable = [{
"Qty": 3,
"List1": [],
"List2": [
{
"serialNumber": "1",
"ischecked":false
},
{
"serialNumber": "2",
"ischecked":true
},
{
"serialNumber": "3",
"ischecked":false
}
],
"lineItemId": 50,
"lineItemQty": 3,
},
]
const filter = _.filter(this.responsetable, function (item) {
return _.some(item.List2, { 'ischecked': true });
});
console.dir(filter)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.core.min.js"></script>
在这里,我想从这个 json 中检查哪些所有孩子都被选中,只有那些我想用对象值显示的孩子。这是我到目前为止所尝试的,但它返回了所有序列号对象,而不是将 ischecked 标志设置为 true 的对象
从这个 json 我想要 qty ,lineitemid 和 lineitemqty 以及匹配的孩子。预期输出为
[{
"Qty": 3,
"List1": [],
"List2": [
{
"serialNumber": "2",
"ischecked":true;
},
],
"lineItemId": 50,
"lineItemQty": 3,
},
]
解决方案
以非常简洁的方式执行此操作的一种方法是_.map/_.mapValues/_.filter
:
_.map(data, (x) => _.mapValues(x, (y) => _.isArray(y) ? _.filter(y, (k) => k.ischecked === true) : y))
包含数据的完整代码:
var data = [{
"Qty": 3,
"List1": [],
"List2": [{
"serialNumber": "1",
"ischecked": false
},
{
"serialNumber": "2",
"ischecked": true
},
{
"serialNumber": "3",
"ischecked": false
}
],
"lineItemId": 50,
"lineItemQty": 3,
}]
var result = _.map(data, (x) => _.mapValues(x, (y) => _.isArray(y) ? _.filter(y, (k) => k.ischecked === true) : y))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
推荐阅读
- azure - 如何重构使用 azure static web 应用程序部署的 azure functions 项目?
- javascript - 仅在点击一定数量的页面链接后才启用按钮链接
- python - 隔离森林 - TypeError:无效的类型提升
- reactjs - Redux Toolkit 历史 API 推送
- java - 在 Java 中使用 JDBC HiveDriver 连接到启用 Kerberos 的集群时出错。javax.security.sasl.SaslException:GSS 启动失败
- python - 用 Folium 绘制热图
- hashicorp-vault - Hashicorp Vault Agent Injector:使用''agent-inject-command'注释的base64解码秘密
- javascript - 我如何排序和显示
单选按钮中的元素? - javascript - 异步/等待并行与顺序
- python - Python列出并计算列表中的所有唯一值