2015-06-09 16 views
101

Tôi có một đối tượng với một số phím và tôi chỉ muốn giữ một số khóa có giá trị của chúng?Làm cách nào để lọc các khóa của đối tượng bằng lodash?

Tôi đã thử với filter:

var data = { 
    "aaa":111, 
    "abb":222, 
    "bbb":333 
}; 

var result = _.filter(data, function(value, key) { 
    return key.startsWith("a"); 
}) 

console.log(result); 

Nhưng nó in một mảng:

[111, 222] 

Mà không phải là những gì tôi muốn.

Làm thế nào để làm điều đó với lodash? Hoặc cái gì khác nếu lodash không hoạt động?

Live Demo: http://jsbin.com/moqufevigo/1/edit?js,output

Trả lời

152

Lodash có _.pickBy chức năng mà thực hiện chính xác những gì bạn đang tìm kiếm.

var thing = { 
 
    "a": 123, 
 
    "b": 456, 
 
    "abc": 6789 
 
}; 
 

 
var result = _.pickBy(thing, function(value, key) { 
 
    return _.startsWith(key, "a"); 
 
}); 
 

 
console.log(result.abc) // 6789 
 
console.log(result.b) // undefined
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>

+8

Dường như điều này bị hỏng trong phiên bản lodash 4 và thuộc tính _.pickBy mới chỉ được gọi với giá trị không phải là khóa . Boo: (... Tôi cho rằng bạn có thể chuỗi _.pick và _.pickBy (thực sự không có bạn không thể có được chức năng tương tự) – SDK

+2

@SDK nó sẽ được sửa trong 4.0.1 https://github.com/lodash/lodash/issues/1765 – ncuillery

+3

Điều này không còn hoạt động như của Lodash mới nhất, chỉ cần một FYI –

20

Chỉ cần thay đổi bộ lọc để omitBy

var result = _.omitBy(data, function(value, key) { 
    return !key.startsWith("a"); 
}) 
+0

Không này vẫn in một mảng? –

+1

Cảm ơn! Và tôi nghĩ rằng chúng ta có thể sử dụng '_.pick' – Freewind

+0

Điều này không còn hoạt động như lodash mới nhất, chỉ là một FYI –

11

Dưới đây là một ví dụ sử dụng lodash 4.x:

var data = { 
 
    "aaa":111, 
 
    "abb":222, 
 
    "bbb":333 
 
}; 
 

 
var result = _.pickBy(data, function(value, key) { 
 
    return key.startsWith("a"); 
 
}); 
 

 
console.log(result); 
 
// Object {aaa: 111, abb: 222}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script> 
 
<strong>Open your javascript console to see the output.</strong>

Các vấn đề liên quan