2016-09-26 9 views
4

私はオブジェクトの配列を持っています。私はオブジェクトを取得するためにそれをフィルタリングしたい。すべてのプロパティには数学的な文字列が含まれている。ramda.jsを使ったオブジェクト配列のフィルタリング

私の配列である場合

var data = [ 
{"name: "John", 
"surname": "Smith"}, 
{"name": "Peter", 
"surname: "Smithie"}] 

Iおよび文字列 "Smiと" とのフィルタは、それが両方のアイテムを返す必要があります。文字列が "John"の場合は、最初のものだけです。

これは私のコードです:

var filtered = R.filter(R.where({ x: R.contains("Smi")}))(data); 

私もエラーが出ます:

Cannot read property 'indexOf' of undefined 

は、誰かが私のRAMDA機能で私を助けてもらえますか?私は行方不明の小さな何か、私は推測する必要があります。事前に感謝します

+0

このアプローチの問題は、 'where({x:contains( 'Smi')})'では、 'x'は意味を持ちません。 Ramdaには、このような "あらゆるキーのための"という概念は含まれていません。 –

答えて

1

私はRamdaで答えることはできませんが、JSで同じ機能を実装したい場合は、次のように簡単に行うことができます。

var data = [{"name": "John", "surname": "Smith"}, {"name": "Peter", "surname": "Smirnof"}], 
 
getObjects = (d,f) => d.filter(o => Object.keys(o).some(k => o[k].includes(f))); 
 
console.log(getObjects(data,"Smi")); 
 
console.log(getObjects(data,"Jo"));

+0

ラムダレスソリューションのように、はるかに大きくはありません。 – trincot

1

あなたはこのような何かを行うことができます:

R.filter(R.pipe(R.values, R.any(R.contains('Smi'))))(data) 

これはリストではなく、文字列で動作するように意図されている、しかし、containsの文書化されていない機能の利点を取っています。しかしそれはdoes workです。

関連する問題