尝试 return 使用 Lodash 的深层嵌套对象
Trying to return a deep nested object with Lodash
我无法在 StackoverlFlow 上找到解决方案,我已经研究这个问题一段时间了。有点难所以如果我应该提供更多信息请告诉我。
我的问题:
我有一个 JSON Lands 对象,每个土地都有一个 ID 和一个与其关联的 Blocks 数组,并且那个 blocks 数组也有带有 ID 的块。
预览:
var Lands = [{
'LandId':'123',
'something1':'qwerty',
'something2':'qwerty',
'Blocks': [
{
'id':'456',
'LandId':'123'
},
{
'BlockId':'789',
'LandId':'123'
}
]
},
...More Land Objects];
注意:数据没有按照我本来的方式设置,但这是很久以前完成的,我必须使用我现在拥有的东西。
我正在尝试编写一个 lodash 函数,它将获取我拥有的 blockId 并匹配它们和 return 来自 Blocks 的 landId。
所以最终结果将是一个 LandId 的列表,其中 return 从区块中编辑。
我正在使用类似的东西,但 return 没有结果:
selectedLand = function(Lands, landIDs){
return _.filter(Lands, function(land){
return land === landIDs[index];
});
};
我知道我正在以错误的方式解决这个问题,并且想知道处理和解决它的适当方法。非常感谢任何帮助。
selectedLand = function(Lands, landIDs){
return _.filter(Lands, function(land){
return land === landIDs[index];
});
};
请注意 index
在此范围内缺少任何定义,因此此函数基本上永远不会 return 为真,除非幸运(?)事故与外部定义的 index
相关。任何时候你打电话给 _.filter(someArr,function(){return false;})
你都会得到 []
。除了 Undefined index
,这会严格比较 land 对象与(可能)landIDs
中的字符串
我不太清楚您选择的具体要求,因此您可以根据自己的需要定制此过滤器。函数 通过检查 .blocks
数组 属性 是否具有 some 值来过滤 lands
数组,其中.landID
属性 包含 在 landsID
数组中。
最后,如果您想充分利用 lodash (or my favorite, ramda.js) I suggest you sit down and read the docs。听起来非常无聊,但 75% 的数据转换战斗是了解您的工具箱中有什么。请注意该过程的英文描述如何与示例代码(过滤器、一些、包括)几乎完全匹配。
var Lands = [{
'LandId': '123',
'something1': 'qwerty',
'something2': 'qwerty',
'Blocks': [{
'id': '456',
'LandId': '123'
}, {
'BlockId': '789',
'LandId': '123'
}]
}
];
// assuming lands is like the above example
// and landIDs is an array of strings
var selectLandsWithBlocks = function(lands, landIDs) {
return _.filter(lands, function(land) {
var blocks = land.Blocks;
var blockHasALandId = function(block) {
return _.includes(landIDs,block.LandId);
};
return _.some(blocks, blockHasALandId);
});
};
console.log(selectLandsWithBlocks(Lands,[]));
console.log(selectLandsWithBlocks(Lands,['mittens']));
console.log(selectLandsWithBlocks(Lands,['123']));
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>
我无法在 StackoverlFlow 上找到解决方案,我已经研究这个问题一段时间了。有点难所以如果我应该提供更多信息请告诉我。
我的问题: 我有一个 JSON Lands 对象,每个土地都有一个 ID 和一个与其关联的 Blocks 数组,并且那个 blocks 数组也有带有 ID 的块。
预览:
var Lands = [{
'LandId':'123',
'something1':'qwerty',
'something2':'qwerty',
'Blocks': [
{
'id':'456',
'LandId':'123'
},
{
'BlockId':'789',
'LandId':'123'
}
]
},
...More Land Objects];
注意:数据没有按照我本来的方式设置,但这是很久以前完成的,我必须使用我现在拥有的东西。
我正在尝试编写一个 lodash 函数,它将获取我拥有的 blockId 并匹配它们和 return 来自 Blocks 的 landId。
所以最终结果将是一个 LandId 的列表,其中 return 从区块中编辑。
我正在使用类似的东西,但 return 没有结果:
selectedLand = function(Lands, landIDs){
return _.filter(Lands, function(land){
return land === landIDs[index];
});
};
我知道我正在以错误的方式解决这个问题,并且想知道处理和解决它的适当方法。非常感谢任何帮助。
selectedLand = function(Lands, landIDs){
return _.filter(Lands, function(land){
return land === landIDs[index];
});
};
请注意 index
在此范围内缺少任何定义,因此此函数基本上永远不会 return 为真,除非幸运(?)事故与外部定义的 index
相关。任何时候你打电话给 _.filter(someArr,function(){return false;})
你都会得到 []
。除了 Undefined index
,这会严格比较 land 对象与(可能)landIDs
我不太清楚您选择的具体要求,因此您可以根据自己的需要定制此过滤器。函数 通过检查 .blocks
数组 属性 是否具有 some 值来过滤 lands
数组,其中.landID
属性 包含 在 landsID
数组中。
最后,如果您想充分利用 lodash (or my favorite, ramda.js) I suggest you sit down and read the docs。听起来非常无聊,但 75% 的数据转换战斗是了解您的工具箱中有什么。请注意该过程的英文描述如何与示例代码(过滤器、一些、包括)几乎完全匹配。
var Lands = [{
'LandId': '123',
'something1': 'qwerty',
'something2': 'qwerty',
'Blocks': [{
'id': '456',
'LandId': '123'
}, {
'BlockId': '789',
'LandId': '123'
}]
}
];
// assuming lands is like the above example
// and landIDs is an array of strings
var selectLandsWithBlocks = function(lands, landIDs) {
return _.filter(lands, function(land) {
var blocks = land.Blocks;
var blockHasALandId = function(block) {
return _.includes(landIDs,block.LandId);
};
return _.some(blocks, blockHasALandId);
});
};
console.log(selectLandsWithBlocks(Lands,[]));
console.log(selectLandsWithBlocks(Lands,['mittens']));
console.log(selectLandsWithBlocks(Lands,['123']));
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>