gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:47 24 4
gpt4 key购买 nike

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

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

控制台.log:

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

最佳答案

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

const getDeepValues = obj => Object
.values(obj)
.flatMap(v => typeof v === 'object' ? getDeepValues(v) : v)

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

const result = getDeepValues(input)

console.log(result)

您可以使用 Ramda 创建一个 pointfree 函数,它可以做同样的事情:

  1. 获取值,
  2. 使用 R.When 和 R.is(Object) 来检查该值是否是一个对象,如果是,则对该值调用 getDeepValues(箭头函数是必需的,因为 getDeepValues 尚未声明),否则返回该值。

const { pipe, values, chain, when, is } = R

const getDeepValues = pipe(
values, // get the values
chain(when(is(Object), v => getDeepValues(v))) // if the value is an object use getDeepValues or just return the value
)

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

const result = getDeepValues(input)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

关于javascript - 如何使用 ramda 获取对象中的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59947353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com