Javascript 如何使用Lodash访问父对象和匹配的子对象?

Javascript 如何使用Lodash访问父对象和匹配的子对象?,javascript,lodash,Javascript,Lodash,我想得到父对象值和所有用lodash检查过标志true的孩子 以下是我到目前为止的情况: responsetable=[{ “数量”:3, “列表1”:[], “清单2”:[ { “序列号”:“1”, “ischecked”:false }, { “序列号”:“2”, “ischecked”:正确 }, { “序列号”:“3”, “ischecked”:false } ], “lineItemId”:50, “lineItemQty”:3, }, ] const filter=u.filter

我想得到父对象值和所有用lodash检查过标志true的孩子

以下是我到目前为止的情况:

responsetable=[{
“数量”:3,
“列表1”:[],
“清单2”:[
{
“序列号”:“1”,
“ischecked”:false
},
{
“序列号”:“2”,
“ischecked”:正确
},
{
“序列号”:“3”,
“ischecked”:false
}
],
“lineItemId”:50,
“lineItemQty”:3,
},
]
const filter=u.filter(this.responsetable,函数(项){
返回{.some(item.List2,{'ischecked':true});
});
console.dir(过滤器)

我希望这能奏效

let responsetable=[{
“数量”:3,
“列表1”:[],
“清单2”:[
{
“序列号”:“1”,
“ischecked”:false
},
{
“序列号”:“2”,
“ischecked”:正确
},
{
“序列号”:“3”,
“ischecked”:false
}
],
“lineItemId”:50,
“lineItemQty”:3,
},
]
对于(变量i=0;i 0){
responsetable[i].List1=responsetable[i].List1.filter((o)=>{
返回o.I检查
})
}
responsetable[i].List2=responsetable[i].List2.filter((o)=>{
返回o.I检查
})
}

log(responsetable)
您可能不需要lodash<代码>过滤器
映射
和一些都内置在javascript中

从您的问题中准确了解您需要什么并不特别容易,但如果您只想在其中一个列表中选择至少有一个
ischecked
值的对象,这里有一个最佳猜测:

const responsetable=[{
“数量”:3,
“列表1”:[],
“清单2”:[
{
“序列号”:“1”,
“ischecked”:false
},
{
“序列号”:“2”,
“ischecked”:正确
},
{
“序列号”:“3”,
“ischecked”:false
}
],
“lineItemId”:50,
“lineItemQty”:3,
},
{
“数量”:5,
“清单1”:[
{
“序列号”:“1”,
“ischecked”:正确
},
{
“序列号”:“2”,
“ischecked”:false
},
{
“序列号”:“3”,
“ischecked”:false
}
],
“清单2”:[
],
“lineItemId”:51,
“lineItemQty”:100,
}
]
const listHasACheckedSerial=list=>list.some(listItem=>listItem.ischecked)
常量GetResponseObject列表=responseObject=>Object.keys(responseObject)
.filter(key=>key.indexOf('List')>-1)
.map(key=>responseObject[key])
常量responseObjectHasCheckedList=responseObjectIn=>GetResponseObjectList(responseObjectIn)
.map(list=>listHasACheckedSerial(list))
.一些(v=>!!v)
常量GetRequiredResponseObject属性=responseObject=>({
数量:响应对象数量,
List1:responseObject.List1.filter(item=>item.ischecked),
List2:responseObject.List2.filter(item=>item.ischecked),
lineItemId:responseObject.lineItemId,
lineItemQty:responseObject.lineItemQty,
})
常量过滤器=响应对象=>响应对象
.filter(responseObject=>responseObject hasCheckedList(responseObject))
.map(responseObject=>GetRequiredResponseObject属性(responseObject))
常量测试=GetResponseObject列表(responsetable[0])
常量结果=过滤器(可响应)

console.dir(result)
一种非常简洁的方法是使用
\uu.map/\uu.mapValues/\uu.filter

_.map(data, (x) => _.mapValues(x, (y) => _.isArray(y) ? _.filter(y, (k) => k.ischecked === true) : y))
包含数据的完整代码:

var数据=[{
“数量”:3,
“列表1”:[],
“清单2”:[{
“序列号”:“1”,
“ischecked”:false
},
{
“序列号”:“2”,
“ischecked”:正确
},
{
“序列号”:“3”,
“ischecked”:false
}
],
“lineItemId”:50,
“lineItemQty”:3,
}]
var结果=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
console.log(结果)

你能发布预期的输出吗?我已经发布了,请帮助我,但是我想要父对象值,正如我在问题中提到的那样。这不是我想要显示的内容。我已经更新了答案。请检查,让我知道它是否对你有效。我不明白,我希望列表1是一个空数组。还有一个问题是签入列表2不是t@Uidev123也无法获得列表1??你也需要查一下清单吗。你可以发布整个样本数据和预期输出吗。基于这个问题,我希望这个解决方案能起作用。是否有使用lodash的简单解决方案?这取决于您想要什么-您想让所有对象都负责,并且对于每个对象,从列表2中删除被检查为false的项?如果您只使用
过滤器
映射
一些