簡體   English   中英

使用鍵數組過濾Javascript對象

[英]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中沒有對象的映射功能,但數組有一個。 最好使用該方法還是只編寫一次函數來遍歷數組,然后遍歷該對象,然后推送到僅具有匹配鍵的新對象,還是有一些簡化方法?

是的,但是您可以映射Objectkeys

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM