2017-07-28 6 views
2

キーが特定の文字列を含むことがわかっている場合、LoDash _.filterを使用して値を返すことはできますか?つまり、次のデータがあるとします:部分文字列のみを使用してLodashを使用してキーを取得

Mydata{ 
"banana" : "1" 
} 

「ana」を含む値を返したいとしますか?私がLoDashで見つけたものは、主に要素の値を検索することですが、キーは検索しません。

答えて

3

あなたにもオブジェクトと Lodashの_.filter()作品、キーが基準に適合した値の配列を取得したい場合。コールバックに渡された2番目のパラメータがキーです。

var data = { 
 
    "banana": 1, 
 
    'lorem': 2, 
 
    '123ana': 3 
 
} 
 

 
var result = _.filter(data, function(v, k) { 
 
    return _.includes(k, 'ana'); 
 
}); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

あなたは性質が一定の基準に準拠したオブジェクトを、必要な場合は、同様の方法で_.pickBy()を使用することができます。

var data = { 
 
    "banana": 1, 
 
    'lorem': 2, 
 
    '123ana': 3 
 
} 
 

 
var result = _.pickBy(data, function(v, k) { 
 
    return _.includes(k, 'ana'); 
 
}); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+0

それはよりエレガントなソリューションですので、私は答えとしてあなたの答えを設定します – WJM

1

ネイティブArray#reduceを使用して目的の結果に達し、これらのキーのみを含むオブジェクトを返します。このオブジェクトには、stringが含まれます。あなたが最初の値を取得するには、文字列の特定の部分でキーを取得するためにfilter()を使用し、map()でき

const obj = { 
 
    banana: 'foo', 
 
    hello: 'bar', 
 
    foo: 'fzz', 
 
    ana: 'xoo', 
 
} 
 

 
const check = (obj, str) => { 
 
    return Object.keys(obj).reduce((s, a) => { 
 
    if (a.includes(str)) { 
 
     s[a] = obj[a]; 
 
    } 
 
    return s; 
 
    }, {}); 
 
} 
 

 
console.log(check(obj, 'ana'));

1

var data = { 
 
    "banana": 1, 
 
    'lorem': 2, 
 
    '123ana': 3 
 
} 
 

 
var result = _.chain(data) 
 
    .keys() 
 
    .filter(e => _.includes(e, 'ana')) 
 
    .map(e => data[e]) 
 
    .value() 
 
    
 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

関連する問題