Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用lodash获取嵌套值_Javascript_Object_Lodash - Fatal编程技术网

Javascript 使用lodash获取嵌套值

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

我试图通过给定的键从对象中检索嵌套值。我已经使它与两个简单的forEach循环,但我喜欢使用一个更。。。这个问题的功能性方法

以下是我目前掌握的代码:

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,我想知道是否还有其他属性需要考虑。是的,还有其他属性。屏幕只是其中之一。因此,嵌套循环。感谢您的快速回复!扁平化的第一个选项确实是最具可读性的解决方案。