Hướng dẫn find value in nested object javascript lodash - tìm giá trị trong lodash javascript đối tượng lồng nhau

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

Hướng dẫn find value in nested object javascript lodash - tìm giá trị trong lodash javascript đối tượng lồng nhau

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

Hướng dẫn find value in nested object javascript lodash - tìm giá trị trong lodash javascript đối tượng lồng nhau

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):

  • _.where(modules, {submodules:{id:3}});
    
    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ị

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);




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

Làm thế nào để bạn sử dụng tìm trong lodash?

Hàm tìm kiếm () của lodash trả về phần tử đầu tiên của bộ sưu tập phù hợp với vị từ đã cho ...
const Arr = [1, 2, 3, 4, 5];// `find ()` thực thi `promplicate` cho mọi phần tử trong mảng cho đến khi //` promplicate` trả về true.....
const Arr = [1, 2, 3, 4, 5];_.find (mảng, v => v> 5);// chưa xác định..

.Value làm gì trong lodash?

Phương thức giá trị ().Các _.Phương thức giá trị () được sử dụng để trả về mảng của các giá trị thuộc tính có khóa chuỗi của riêng chuỗi của đối tượng.return the array of the own enumerable string keyed property values of the object.

Làm thế nào để tôi làm phẳng đối tượng lodash?

Phương thức flattendeep () trong lodash được sử dụng để làm phẳng đệ quy một mảng, nghĩa là để làm phẳng tất cả các mảng lồng nhau hoàn toàn. in Lodash is used to recursively flatten an array, that is, to flatten all the nested arrays completely.

Phương pháp Lodash là gì?

Lodash là một thư viện dựa trên JavaScript phổ biến, cung cấp hơn 200 chức năng để tạo điều kiện phát triển web.Nó cung cấp các chức năng trợ giúp như bản đồ, bộ lọc, gọi cũng như liên kết chức năng, khuôn mẫu JavaScript, kiểm tra bình đẳng sâu, tạo các chỉ mục, v.v.map, filter, invoke as well as function binding, javascript templating, deep equality checks, creating indexes and so on.