Tôi không thấy cách để đối tượng find
khi tình trạng của tôi liên quan đến một mảng lồng nhau.
var modules = [{
name: 'Module1',
submodules: [{
name: 'Submodule1',
id: 1
}, {
name: 'Submodule2',
id: 2
}
]
}, {
name: 'Module2',
submodules: [{
name: 'Submodule1',
id: 3
}, {
name: 'Submodule2',
id: 4
}
]
}
];
Điều này sẽ không hoạt động vì submodules
là một mảng, không phải là một đối tượng. Có bất kỳ tốc ký nào sẽ làm cho công việc này không? Tôi đang cố gắng tránh lặp lại mảng bằng tay.
_.where[modules, {submodules:{id:3}}];
Khi được hỏi ngày 7 tháng 5 năm 2015 lúc 17:02May 7, 2015 at 17:02
Lodash cho phép bạn lọc trong dữ liệu lồng nhau [bao gồm cả mảng] như thế này:
_.filter[modules, { submodules: [ { id: 2 } ]}];
Đã trả lời ngày 27 tháng 12 năm 2016 lúc 14:58Dec 27, 2016 at 14:58
Martinossmartinossmartinoss
4.9402 Huy hiệu vàng44 Huy hiệu bạc 50 Huy hiệu Đồng2 gold badges44 silver badges50 bronze badges
4
Đây là những gì tôi nghĩ ra:
_.find[modules, _.flow[
_.property['submodules'],
_.partialRight[_.some, { id: 2 }]
]];
// → { name: 'Module1', ... }
Sử dụng Flow [], bạn có thể xây dựng một chức năng gọi lại thực hiện những gì bạn cần. Khi gọi, dữ liệu chảy qua từng chức năng. Điều đầu tiên bạn muốn là thuộc tính submodules
và bạn có thể có được hàm sử dụng hàm [].
Các mảng các mô hình con sau đó được đưa vào một số [], trả về đúng nếu nó chứa mô hình con mà bạn sau đó, trong trường hợp này là ID ____10.
Thay thế
_.where[modules, {submodules:{id:3}}];
1 bằng _.where[modules, {submodules:{id:3}}];
2 nếu bạn đang tìm kiếm nhiều mô -đun và không chỉ là mô -đun đầu tiên được tìm thấy.Đã trả lời ngày 7 tháng 5 năm 2015 lúc 20:45May 7, 2015 at 20:45
Adam Boduchadam BoduchAdam Boduch
10,7k3 huy hiệu vàng27 Huy hiệu bạc38 Huy hiệu đồng3 gold badges27 silver badges38 bronze badges
2
Tôi nghĩ rằng cơ hội tốt nhất của bạn là sử dụng một chức năng, để có được mô -đun.
_.select[modules, function [module] {
return _.any[module.submodules, function [submodule] {
return _.where[submodule, {id:3}];
}];
}];
Hãy thử điều này để có được mô hình con
.where[.pluck[modules, "submodules"], {submodules:{id:3}}];
Đã trả lời ngày 7 tháng 5 năm 2015 lúc 17:08May 7, 2015 at 17:08
MabedanmabedanMabedan
8478 Huy hiệu bạc27 Huy hiệu Đồng8 silver badges27 bronze badges
5
Tôi đã xem xét điều này và tôi nghĩ rằng lựa chọn tốt nhất là sử dụng DeepDash. Đó là một tập hợp các phương pháp để thực hiện lọc sâu, tìm, v.v.
Chắc chắn rằng nó có thể với Lodash một mình nhưng với Deepdash thì dễ dàng hơn.
Tôi đã cố gắng chuyển đổi câu trả lời trước đó sang phiên bản Lodash mới nhất nhưng điều đó không hoạt động. Mọi phương pháp đều không được dùng trong V4 của Lodash. Thay thế có thể
_.where[modules, {submodules:{id:3}}];
3 Trả về một đối tượng với một số thông tin cho mục tìm thấy [chỉ một số giá trị, xem tài liệu để biết thêm chi tiết]:
4 là đối tượng được tìm thấy_.where[modules, {submodules:{id:3}}];
5 đó là chỉ mục trong mảng lồng_.where[modules, {submodules:{id:3}}];
6 cha mẹ của giá trị_.where[modules, {submodules:{id:3}}];
Vì vậy, mã cho
_.where[modules, {submodules:{id:3}}];
3 trông giống như:const modules = [{
name: 'Module1',
submodules: [{
name: 'Submodule1',
id: 1
}, {
name: 'Submodule2',
id: 2
}]
}, {
name: 'Module2',
submodules: [{
name: 'Submodule1',
id: 3
}, {
name: 'Submodule2',
id: 4
}]
}];
const getModule = [modules, id] =>
_.findDeep[modules, module => module.id === id, {
childrenPath: "submodules"
}];
const resultEl = document.getElementById["result"];
const foundModule = getModule[modules, 3].value;
resultEl.innerText = JSON.stringify[foundModule, null, 2];
deepdash[_];
Example to get module with id = 3
Đã trả lời ngày 16 tháng 2 năm 2020 lúc 9:36Feb 16, 2020 at 9:36
AwolfawolfAWolf
8.6605 Huy hiệu vàng32 Huy hiệu bạc39 Huy hiệu Đồng5 gold badges32 silver badges39 bronze badges