我有类似的json数据:
{
"Sections": [
{
"Categories": [
{
"Name": "Book",
"Id": 1,
"Options": [
{
"Name": "AAAA",
"OptionId": 111
},
"Selected": 0
},
{
"Name": "Car",
"Id": 2,
"Options": [
{
"Name": "BBB",
"OptionId": 222
},
"Selected": 0
},
],
"SectionName": "Main"
},
... more sections like the one above
]
}
鉴于这些数据,我想根据其(类别)ID在一个部分中找到一个类别,并设置其选择的选项,我试过这个,但无法使其工作....注意类别Id在整个数据集中将是唯一的。
_.find(model.Sections, { Categories: [ { Id: catId } ]});
答案 0 :(得分:2)
根据您的数据模型,看起来您正在尝试查找矩阵内的元素:章节可以有多个类别,而类别可以有多种类型(汽车,书籍......)。
我担心lodash中没有一个允许深度查找的功能,你必须以'传统'的方式实现它(几个fors)。
我提供的这种解决方案比传统的嵌套fors更具“功能性”。它还利用了这样一个事实:当你在forEach中显式返回false时,循环结束。因此,一旦找到具有提供的id的元素,就会结束循环并返回元素(如果找不到,则返回undefined
)。
希望它有所帮助。
const findCategoryById = (sections, id) => {
var category;
_.forEach(sections, (section) => {
category = _.find(section.Categories, ['Id', id]);
return _.isUndefined(category);
});
return category;
};
const ex = {
"Sections": [{
"Categories": [{
"Name": "Book",
"Id": 1,
"Options": [{
"Name": "AAAA",
"OptionId": 111
}],
"Selected": 0
},
{
"Name": "Car",
"Id": 2,
"Options": [{
"Name": "BBB",
"OptionId": 222
}],
"Selected": 0
}
],
"SectionName": "Main"
}]
};
console.log(findCategoryById(ex.Sections, 2));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>