Javascript 这里有更好的使用applySpec的方法吗

Javascript 这里有更好的使用applySpec的方法吗,javascript,functional-programming,ramda.js,Javascript,Functional Programming,Ramda.js,我认为这里的冗余可以通过使用一些函数insde ramda来消除,但是我对这个库非常陌生,所以我想不出怎么做。如果能提供一些帮助,我将不胜感激 let lib = { getFormattedPropsForUser: R.compose( R.pickBy(R.identity), R.applySpec({ username: R.prop('username'), password: R.prop('p

我认为这里的冗余可以通过使用一些函数insde ramda来消除,但是我对这个库非常陌生,所以我想不出怎么做。如果能提供一些帮助,我将不胜感激

let lib = {
    getFormattedPropsForUser: R.compose(
        R.pickBy(R.identity),
        R.applySpec({
            username: R.prop('username'),
            password: R.prop('password')
        })),
    getFormattedQueryParamsForUser: R.compose(
        R.pickBy(R.identity),
        R.applySpec({
            _id: R.prop('_id'),
            username: R.prop('username'),
            password: R.prop('password')
        })
    )

};

将两个应用程序的公共部分提取到一个函数中,并使用部分应用程序和将更多项添加到规范中

示例:

constforuser=spec=>R.compose(
R.pickBy(R.identity),
R.applySpec({
…规格,
用户名:R.prop('username'),
密码:R.prop('password')
})
)
常量库={
getFormattedPropsForUser:forUser(),
getFormattedQueryParamsForUser({u id:R.prop(“'u id')}),
}
常量测试={u id:'id',用户名:'username',密码:'password'}
console.log(lib.getFormattedPropsForUser(测试))
console.log(lib.getFormattedQueryParamsfourser(test))

将两个应用程序的公共部分提取到一个函数中,并添加使用部分应用程序和将更多项添加到规范中的功能

示例:

constforuser=spec=>R.compose(
R.pickBy(R.identity),
R.applySpec({
…规格,
用户名:R.prop('username'),
密码:R.prop('password')
})
)
常量库={
getFormattedPropsForUser:forUser(),
getFormattedQueryParamsForUser({u id:R.prop(“'u id')}),
}
常量测试={u id:'id',用户名:'username',密码:'password'}
console.log(lib.getFormattedPropsForUser(测试))
console.log(lib.getFormattedQueryParamsfourser(test))

我认为您可以大大简化函数,并相对容易地抽象出公共部分。这里的
getActualProps
与您的
applySpec
/
pickBy(identity)
shuffle的功能非常相似,实际字段被参数化。然后就可以用它来编写这两个函数(或库方法)

const getActualProps=(名称)=>pickBy((v,k)=>includes(k,名称))
const getFormattedPropsForUser=getActualProps(['username','password'])
const getFormattedQueryParamsForUser=getActualProps([''用户名''])
//试验
const fred={{u id:1,名称:'fred',用户名:'fflint',密码:'dino'}
const-wilma={u-id:2,名称:'wilma',用户名:'wilma42'}
const barney={u id:3,名称:'barney',密码:'bam*2'}
console.log(getFormattedPropsForUser(fred))/~>{密码:“dino”,用户名:“fflint”}
log(getFormattedQueryParamsFruser(fred))/~>{u id:1,用户名:“fflint”}
console.log(getFormattedPropsForUser(wilma))/~>{用户名:“wilma42”}
console.log(getFormattedQueryParamsForUser(wilma))/~>{u id:2,用户名:“wilma42”}
console.log(getFormattedPropsForUser(barney))/~>{密码:“bam*2”}
console.log(getFormattedQueryParamsFruser(barney))//~>{u id:3}


const{pickBy,includes}=ramda
我认为您可以将函数简化很多,并相对容易地将公共部分抽象出来。这里的
getActualProps
与您的
applySpec
/
pickBy(identity)
shuffle的功能非常相似,实际字段被参数化。然后就可以用它来编写这两个函数(或库方法)

const getActualProps=(名称)=>pickBy((v,k)=>includes(k,名称))
const getFormattedPropsForUser=getActualProps(['username','password'])
const getFormattedQueryParamsForUser=getActualProps([''用户名''])
//试验
const fred={{u id:1,名称:'fred',用户名:'fflint',密码:'dino'}
const-wilma={u-id:2,名称:'wilma',用户名:'wilma42'}
const barney={u id:3,名称:'barney',密码:'bam*2'}
console.log(getFormattedPropsForUser(fred))/~>{密码:“dino”,用户名:“fflint”}
log(getFormattedQueryParamsFruser(fred))/~>{u id:1,用户名:“fflint”}
console.log(getFormattedPropsForUser(wilma))/~>{用户名:“wilma42”}
console.log(getFormattedQueryParamsForUser(wilma))/~>{u id:2,用户名:“wilma42”}
console.log(getFormattedPropsForUser(barney))/~>{密码:“bam*2”}
console.log(getFormattedQueryParamsFruser(barney))//~>{u id:3}

const{pickBy,includes}=ramda