Javascript 如何使用ramda获取对象中的所有值
如何使用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中使用一个编
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-是的,箭头函数很烦人:)