![](/img/trans.png)
[英]Iterate nested array of objects, find id and update object matching the id
[英]How to use _.where to find by ID an object nested in an array of objects?
这是JSON:
tree.json:
[
{
"objectId": "o3mH2lo8wO",
"name": "Coeptis",
"thumbnailUrl": "https://storage.googleapis.com/bundle_asia_dra/portal/buildingImg/Coeptis.png",
"createdAt": "2015-06-29T08:16:51.897Z",
"version": 0,
"pano": []
},
{
"objectId": "ueCCX8v4Qz",
"name": "Sunflower",
"thumbnailUrl": "https://storage.googleapis.com/bundle_asia_dra/portal/buildingButton/caisa.png",
"createdAt": "2015-08-25T12:11:02.235Z",
"version": 0,
"space": "56-139",
"pano": [
{
"objectId": "TIdm6sG1r0",
"name": "D0",
"panoData": [
我知道如何获取第一个对象(例如"objectId": "ueCCX8v4Qz"
):
_.where(tree, {"objectId": "ueCCX8v4Qz"})
但是我不知道如何获取例如"objectId": "TIdm6sG1r0"
(位于pano:
数组内部的对象)。
如何做到这一点?
可以结合使用reduce和where来遍历父元素,并在指定的属性上执行where。 就像是
var tree = [{ "objectId": "o3mH2lo8wO", "name": "Coeptis", "thumbnailUrl": "https://storage.googleapis.com/bundle_asia_dra/portal/buildingImg/Coeptis.png", "createdAt": "2015-06-29T08:16:51.897Z", "version": 0, "pano": [] }, { "objectId": "ueCCX8v4Qz", "name": "Sunflower", "thumbnailUrl": "https://storage.googleapis.com/bundle_asia_dra/portal/buildingButton/caisa.png", "createdAt": "2015-08-25T12:11:02.235Z", "version": 0, "space": "56-139", "pano": [{ "objectId": "TIdm6sG1r0", "name": "D0", "panoData": [] }] }]; // register new function to be run on underscore _.mixin({ 'nestedWhere': function(parent, childTarget, searchOptions) { // reduce the parent with an intial state set to an empty array that we push a parent // to if a child where clause is matched return _.reduce(parent, function(memo, parentElement) { if (_.where(parentElement[childTarget], searchOptions).length > 0) { memo.push(parentElement); } return memo; }, []); } }); var data = _.nestedWhere(tree, "pano", { "objectId": "TIdm6sG1r0" }); console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.