首页 > 解决方案 > 如何使用 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,
  },
  ]      

标签: javascriptlodash

解决方案


以非常简洁的方式执行此操作的一种方法是_.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>


推荐阅读