js-排序-对象key自动排序问题

function KeyMapValue (label, modalRs) {
    
    // 返回对象则排序错乱,key为数字字符串时会自动排序
    // 对象自动排序, 错乱1
    // return _.reduce(modalRs, (pre, cur) => {
    //   console.log(pre, cur)
    //   if(_.has(label, cur)) {
      //     // _.set(pre, cur, _.get(label, cur))
      //     return pre
      //   }
    // }, {})
    
    // let r = _.filter(label, (v, k) => modalRs.includes(k)) // 错乱2
    // let r = _.filter(label, (v, k) => _.includes(modalRs, k)) // 错乱3
    // return r

    // 使用symbol固定key 答案1
    // let get = _.partial(_.get, label)
    // return _.map(modalRs, v => {
    //   return { [Symbol.for(v)] : get(v) }
    // })

    // 返回对象数组 答案2
    // return _.map(modalRs, v => {
    //   return {[v]: label[v]}
    // })
    
    // 返回前缀key+数字字符串 答案3
    let prefix = '_'
    let labelHas = _.partial(_.has, label)
    let labelGet = _.partial(_.get, label)
    return _.reduce(modalRs, (pre, cur) => {
      let hasKey = _.memoize(_.cond([
        [labelHas, _.constant(_.set(pre, prefix + cur, labelGet(cur)))]
      ]))
      hasKey(cur)
      return pre
    }, {})

    // 最优解是使用map,key值唯一不重复,不乱排 答案4
    return _.reduce(modalRs, (pre, cur) => {
      let hasKey = _.memoize(_.cond([
        [labelHas, _.constant(pre.set(cur, labelGet(cur)))]
      ]))
      hasKey(cur)
      return pre
    }, new Map())
  }
  // let rs = _.at(label, modalRs) // 只能拿到value x不符合要求
  // let rs = _.pick(label, modalRs) // key会错乱0
  let rs = KeyMapValue(label, modalRs)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值