【问题标题】:How to remove $$hashKey from objects?如何从对象中删除 $$hashKey?
【发布时间】:2017-01-31 16:46:28
【问题描述】:

Ramda REPL example

嗨,我有一个对象数组。这些对象以某种方式获得了$$hashKey。我需要删除 $$hashKey 以便我的删除重复或删除唯一逻辑。

let tickers = [
  {
    $$hasKey: "object:280",
    ticker: 'goog'
  },
  { 
    $$hasKey: "object:308",
    ticker: 'goog'
  },
  {
    $$hasKey: "object:327",
    ticker: 'goog'
  }
]

R.uniq(tickers); //-> Returns all instead of 1

R.dropRepeats(tickers); //-> Returns all instead of 1

我试过这个,但是我的代码数组最终得到了 3 个 undefined 值。

const removeRepeats = tickers => {
    console.log('removeRepeats', tickers);
    tickers = _.map(tickers, ticker => {
        delete ticker['$$hasKey']; 
    });

    return R.dropRepeats(tickers);
};

【问题讨论】:

  • “ramda”有 map() 吗?
  • 如果你更新 removeRepeats 会发生什么: tickers = _.map(tickers,ticker => { return {ticker:ticker["ticker"]}; });
  • 哈哈是的,确实有效!大声笑对不起,我看到这里发生了什么......我对删除/销毁那些$$hashKey 的钥匙非常有远见,我忘记了我可以这样做。想发表你的答案吗?

标签: javascript object functional-programming ramda.js


【解决方案1】:

我会尝试:

const removeRepeats = tickers => {
    console.log('removeRepeats', tickers);
    tickers = _.map(tickers, ticker => { return {ticker: ticker["ticker"]}; });
    return R.dropRepeats(tickers);
};

【讨论】:

    【解决方案2】:

    我不知道你为什么需要同时使用 lodash 和 ramda。任何一个 lodash 或 ramda 本身就足够了一个班轮

    lodash:

    _.uniqWith(_.map(tickers, (ticker) => _.pick(ticker, ['ticker'])), _.isEqual)
    

    拉姆达:

    R.uniq(R.map(R.pick(['ticker']))(tickers))
    

    或者如果您想比较不以$$ 开头的所有属性(角度内部属性)

    lodash:

    _.uniqWith(_.map(tickers, (ticker) => _.pickBy(ticker, (val, key) => !_.startsWith(key, '$$'))), _.isEqual)
    

    拉姆达:

    R.uniq(R.map(R.pickBy((v, k) => !k.startsWith('$$')))(tickers))
    

    【讨论】:

      【解决方案3】:

      我假设你真的想要uniq 而不是dropRepeatsuniq 为您提供列表中不同元素的集合。 dropRepeats 只是删除相同值的连续副本。 ([1, 1, 2, 3, 3, 3, 2, 2, 1] => [1, 2, 3, 2, 1])。

      为此,我将其视为两个步骤,一个是创建没有违规键的版本(Ramda 的dissoc 应该对此有所帮助),另一个是将列表减少到 uniq 元素。我可能会这样写:

      let myFunc = R.pipe(R.map(R.dissoc('$$hasKey')), R.uniq);
      myFunc(tickers);
      

      如果您不想简单地删除单个属性,而是保留它们的固定列表,您可以这样做:

      R.pipe(R.map(R.pick(['ticker', 'prop2', 'prop3'])), R.uniq)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 2023-01-16
        • 2021-07-23
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多