2017-07-28 104 views
2

如果只知道密鑰包含某個字符串,是否可以使用LoDash _.filter返回值?假設您有以下數據:使用Lodash獲取密鑰只使用部分密鑰字符串

Mydata{ 
"banana" : "1" 
} 

我想返回包含「ana」的值嗎?我在LoDash上找到的所有內容主要是搜索元素值而不是鍵。

回答

3

如果你想要得到的值,鍵符合的標準, Lodash的_.filter()作品與對象和數組。傳遞給回調的第二個參數是關鍵。

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

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

你可先用filter()獲得與字符串的特定部分鍵,然後map()得到的值。

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>