[英]Filtering Javascript object using array of keys
基本上,我有一個如下所示的JavaScript數組:
var keyFilters = ["key_1", "key_2", "key_3"];
我有一個看起來像這樣的對象:
myObject["key_1"] = "Value 1";
myObject["key_2"] = "Value 2";
myObject["key_random"] = "Value 2";
我需要配對myObject
對象以僅具有keyFilters
數組中存在的鍵。 有時,對象將沒有過濾器中存在的鍵。 在此示例中,使用keyFilters
過濾myObject
將導致輸出以下對象:
myObject = {
"key_1": "Value 1",
"key_2": "Value 2",
}
我知道JS中沒有對象的map
功能,但數組有一個。 最好使用該方法還是只編寫一次函數來遍歷數組,然后遍歷該對象,然后推送到僅具有匹配鍵的新對象,還是有一些簡化方法?
for (i in myObject) if (keyFilters.indexOf(i) < 0) delete myObject[i];
Underscore.js有一個很好的實現。 https://github.com/jashkenas/underscore/blob/master/underscore.js#L1108
// Return a copy of the object only containing the whitelisted properties.
_.pick = restArgs(function(obj, keys) {
var result = {}, iteratee = keys[0];
if (obj == null) return result;
if (_.isFunction(iteratee)) {
if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
keys = _.allKeys(obj);
} else {
iteratee = keyInObj;
keys = flatten(keys, false, false);
obj = Object(obj);
}
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
var value = obj[key];
if (iteratee(value, key, obj)) result[key] = value;
}
return result;
});
我知道JS中沒有對象的映射功能,但數組有一個。 最好使用該方法還是只編寫一次函數來遍歷數組,然后遍歷該對象,然后推送到僅具有匹配鍵的新對象,還是有一些簡化方法?
是的,但是您可以映射Object
的keys
:
Object.keys(myObject).map(key => {
if (keyFilters.indexOf(key) === -1) {
delete myObject[key];
}
});
希望這適合您!
如果要基於數據返回新對象,請使用以下命令:
let keyFilters = ["key_1", "key_2", "key_3"];
let myObject = {};
myObject["key_1"] = "Value 1";
myObject["key_2"] = "Value 2";
myObject["key_random"] = "Value 2";
let newObject = Object.keys(myObject)
.filter((key) => keyFilters.includes(key))
.map((key) => {
return {[key]: myObject[key]}
})
.reduce((a, b) => Object.assign({}, a,b));
它:
1)僅過濾包含的鍵(作為數組)
2)通過它們映射並創建鍵-值對的新對象(作為數組)
3)將映射數組簡化為單個對象
遍歷對象的鍵,然后使用includes
方法在數組中查找鍵(如果不存在),然后將其刪除。
var safe_keys = ["key_1", "key_2", "key_3"], obj = { 'key_1': 'Value 1', 'key_2': 'Value 2', 'key_random': 'Value 2' }; for (let key of Object.keys(obj)) !safe_keys.includes(key) && delete obj[key]; console.log(obj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.