Javascript 使用lodash获取嵌套值
我试图通过给定的键从对象中检索嵌套值。我已经使它与两个简单的forEach循环,但我喜欢使用一个更。。。这个问题的功能性方法 以下是我目前掌握的代码:Javascript 使用lodash获取嵌套值,javascript,object,lodash,Javascript,Object,Lodash,我试图通过给定的键从对象中检索嵌套值。我已经使它与两个简单的forEach循环,但我喜欢使用一个更。。。这个问题的功能性方法 以下是我目前掌握的代码: const object = { screen: { '[data-id="123"]': { 'font-family': 'Arial', }, '[data-id="456"]': { 'background-color': 'red', 'font-family': 'Com
const object = {
screen: {
'[data-id="123"]': {
'font-family': 'Arial',
},
'[data-id="456"]': {
'background-color': 'red',
'font-family': 'Comic Sans',
},
},
};
const prop = 'font-family';
const props = [];
forEach(object, (selectors) => {
forEach(selectors, (selector) => {
if (prop in selector) {
props.push(selector[prop]);
}
});
});
console.log(props);
在这种情况下,函数返回由prop const指示的字体系列数组
我希望使用像map和reduce这样的lodash函数,但我真的不知道从哪里开始
提前感谢。因为这是一个嵌套对象,所以它实际上取决于您希望如何处理它。如果以嵌套方式使用贴图,最终将得到嵌套数组。为了匹配输出,可以展平嵌套数组
_.flatten(_.map(object, (prop) => _.map(prop, (nestedProp) => nestedProp['font-family'])));
但是如果不想使用reduce而不是flant,那么可以从数组中减少嵌套数组
_.reduce(_.map(object, (prop) => _.map(prop, (nestedProp) => nestedProp['font-family'])),(a, b) => [...a, ...b]);
在这一点上,我认为可读性受到了一些冲击。正如您所见,嵌套映射函数可能会变得混乱。您可以使用递归迭代对象/数组,并使用与属性相等的键收集所有值:
const collect=prop,obj=>
_.flatMapobj,v,k=>{
ifk==prop返回v;
返回uu.isObjectv?collectprop,v:[];
};
常量对象={
屏幕:{
“[data id=123]”:{
“字体系列”:“Arial”,
},
“[data id=456]”:{
“背景色”:“红色”,
“字体系列”:“Comic Sans”,
},
},
};
const result=collect'font-family',对象;
console.logresult;
给定OP的代码,使用嵌套循环,而不是直接针对Objist.Scor,我想知道是否还有其他属性需要考虑。是的,还有其他属性。屏幕只是其中之一。因此,嵌套循环。感谢您的快速回复!扁平化的第一个选项确实是最具可读性的解决方案。