Javascript 如何使用ramda获取对象中的所有值

Javascript 如何使用ramda获取对象中的所有值,javascript,node.js,ramda.js,Javascript,Node.js,Ramda.js,如何使用ramda映射到所有对象并获取所有值 const input ={ a: 'apple', b:{ c:{ d:{ e: 'egg', f: 'fish' } }, g: 'guava', h: 'honey', } } console.log: ['apple', 'egg', 'fish', 'guava', 'honey'] 无需使用Ramda,您可以在plan JS中使用一个编

如何使用ramda映射到所有对象并获取所有值

const input ={
  a: 'apple',
  b:{
    c:{
      d:{
        e: 'egg',
        f: 'fish'
      }
    },
    g: 'guava',
    h: 'honey',
  }
}
console.log:

['apple',
'egg',
'fish',
'guava',
'honey']

无需使用Ramda,您可以在plan JS中使用一个编写巧妙的递归:

const getDeepValues=obj=>Object
.values(obj)//1。迭代对象值
.减少((acc,cur)=>[
…acc,//3.传递以前的值
...(
对象的cur instanceof//4。如果遇到的值是对象。。。
?getDeepValues(cur)/…然后使用递归添加所有深度值
:[cur]/…否则请添加一个字符串
),
], []); // 2.从空数组开始
常量输入={
a:‘苹果’,
b:{
c:{
d:{
e:‘蛋’,
f:‘鱼’
}
},
g:‘番石榴’,
h:‘亲爱的’,
}
}

log(getDeepValues(input))
无需使用Ramda,您可以在plan JS中通过一个巧妙编写的递归函数来完成:

const getDeepValues=obj=>Object
.values(obj)//1。迭代对象值
.减少((acc,cur)=>[
…acc,//3.传递以前的值
...(
对象的cur instanceof//4。如果遇到的值是对象。。。
?getDeepValues(cur)/…然后使用递归添加所有深度值
:[cur]/…否则请添加一个字符串
),
], []); // 2.从空数组开始
常量输入={
a:‘苹果’,
b:{
c:{
d:{
e:‘蛋’,
f:‘鱼’
}
},
g:‘番石榴’,
h:‘亲爱的’,
}
}

console.log(getDeepValues(input))
您可以使用
Object.values()
Array.flatMap()
创建一个递归函数,从对象获取值,然后迭代值,并对对象的每个值调用自身:

const getDeepValues=obj=>Object
.价值观(obj)
.flatMap(v=>typeof v=='object'?getDeepValues(v):v)
常量输入={“a”:“苹果”,“b”:{“c”:{“d”:{“e”:“蛋”,“f”:“鱼”}},“g”:“番石榴”,“h”:“蜂蜜”}
常量结果=getDeepValues(输入)

console.log(result)
您可以使用
Object.values()
Array.flatMap()
创建一个递归函数,从对象获取值,然后迭代值,并对对象的每个值调用自身:

const getDeepValues=obj=>Object
.价值观(obj)
.flatMap(v=>typeof v=='object'?getDeepValues(v):v)
常量输入={“a”:“苹果”,“b”:{“c”:{“d”:{“e”:“蛋”,“f”:“鱼”}},“g”:“番石榴”,“h”:“蜂蜜”}
常量结果=getDeepValues(输入)

console.log(result)
这可能会为您指明正确的方向:这可能会为您指明正确的方向:谢谢您的建议,但我需要了解在这方面是否有可能使用纯ramdascenario@B_B:除非这是一个学习练习,否则我会小心使用“纯拉姆达”这个概念。Ramda是一个库,而不是一个框架。它的目的是使某种类型的编码更容易,而不是规定如何编写自己的代码。只有在以下情况下使用它它使您的代码更简单。Ori Drori的答案显示了Ramda和vanilla JS版本。在我看来,香草的更简单;这是我会选择的。(我是拉姆达的创始人之一)谢谢你的建议,但我需要了解是否有可能在这方面使用纯拉姆达scenario@B_B:除非这是一个学习练习,否则我会小心使用“纯拉姆达”这个概念。Ramda是一个库,而不是一个框架。它的目的是使某种类型的编码更容易,而不是规定如何编写自己的代码。只有在以下情况下使用它它使您的代码更简单。Ori Drori的答案显示了Ramda和vanilla JS版本。在我看来,香草的更简单;这是我会选择的。(我是Ramda的创始人之一。)谢谢你,那么使用Ramda过滤价值是可能的,这很好。我很想找出一个Ramda替代方案,它会丢失最后一点
(v)=>getDeepValues(v)
,但只能看到它完成了。我喜欢这里的香草口味。@B_B-欢迎光临。你可以用Ramda来做,但香草更容易,可读性更强。@ScottSauyet-是的,箭头函数很烦人:)谢谢你,那么可以用Ramda来过滤值这很好。我很想找出一个Ramda替代方案,它会丢失最后一点
(v)=>getDeepValues(v)
,但只能看到它完成了。我喜欢这里的香草口味。@B_B-欢迎光临。你可以用Ramda来做,但香草更容易,可读性更强。@ScottSauyet-是的,箭头函数很烦人:)