2016-09-22 3 views
1

Ramda REPL example

Привет, поэтому у меня есть массив объектов. Эти объекты каким-то образом получают $$hashKey. Мне нужно удалить $$hashKey, чтобы мой кадр дублировал или удалял логику uniques.

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); 
}; 
+0

ли «ramda» имеют **карта()**? – JonSG

+0

Да http://ramdajs.com/docs/#map –

+1

Что произойдет, если вы обновите removeRepeats с помощью: ** tickers = _.map (tickers, ticker => {return {ticker: ticker ["ticker"]};}); ** – JonSG

ответ

2

Я хотел бы попробовать:

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) 

ramda:

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

или если вы хотите сравнить без всех свойств, начиная с $$ (угловыми внутренними свойствами)

lodash:

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

ramda:

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

Я предполагаю, что вы действительно хотите uniq, а не dropRepeats. uniq дает вам набор различных элементов в списке. dropRepeats просто удаляет последовательные копии того же значения. ([1, 1, 2, 3, 3, 3, 2, 2, 1] => [1, 2, 3, 2, 1]).

Чтобы сделать это, я бы подумал об этом как о двух шагах: один для создания версий без оскорбительного ключа (Ramda's 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) 
Смежные вопросы