通过特定键仅过滤对象中的少量元素

时间:2018-07-15 18:53:19

标签: javascript reactjs

我正在做这样的事情:

我的对象看起来像这样:

{
  a: 1,
  b: 2,
  c: 3,
  game01: 1,
  game02: 2,
  game03: 3
}

我需要做的是从中返回一个仅包含最后3对的对象,因此它看起来像这样:

{
  game01: 1,
  game02: 2,
  game03: 3
}

我不希望手动进行此操作,但是最好使用类似过滤数组的方法。

谢谢!

4 个答案:

答案 0 :(得分:0)

对象中没有真正的顺序概念,因此您无法可靠地提取对象的“后三个键”。

但是,您可以遍历对象中的所有键,并仅将具有game作为子字符串的键包含在最终结果中。

示例

const obj = {
  a: 1,
  b: 2,
  c: 3,
  game01: 1,
  game02: 2,
  game03: 3
};

const result = Object.keys(obj).reduce((result, key) => {
  if (key.includes('game')) {
    result[key] = obj[key];
  }
  return result;
}, {});

console.log(result);

答案 1 :(得分:0)

您可以使用Object.keys遍历对象,然后对最后3个键进行切片,然后创建一个新对象。

var test = {
    a: 1,
    b: 2,
    c: 3,
    game01: 1,
    game02: 2,
    game03: 3
    }
    var newObject = {};
    Object.keys(test).slice(-3).forEach(ele=>newObject[ele] = test[ele]);
    console.log(newObject)

答案 2 :(得分:0)

您可以定义自己的过滤器方法,例如在builder.RegisterAssemblyTypes(Assembly.GetEntryAssembly()) .Where(type => type.Name.EndsWith("ViewModel")) .Where(type => !string.IsNullOrWhiteSpace(type.Namespace) && type.Namespace.Contains("ViewModels")) .Where(type => !type.IsAssignableFrom(typeof(INotificationHandler<>))) .AssignableTo<INotifyPropertyChanged>() .AsSelf() .InstancePerDependency(); 上,使其工作方式类似于Object

Array#filter

如您所见,我在这里还定义了另一种方法,它可以单独使用:Object.from = arr => Object.assign(...arr.map( ([k, v]) => ({[k]: v}) )); Object.filter = (obj, predicate) => Object.from(Object.entries(obj).filter(predicate)); // Example use: const obj = {a: 1, b: 2, c: 3, game01: 1, game02: 2, game03: 3 }; const filtered = Object.filter(obj, ([key, value]) => key.includes("game")); console.log(filtered);从具有键/值对的数组(子数组)创建对象。它的作用与Object.from相反,后者为给定对象创建键/值对的数组。

答案 3 :(得分:0)

您可以使用Object.entries(obj)将现有对象转换为数组数组(每个element-array包含[key,value]),然后遍历该对象以检查每个键是否包含“ game”子字符串。您可以将满足此条件的对象添加到一些新对象中。

let obj = {
    a: 1,
    b: 2,
    c: 3,
    game01: 1,
    game02: 2,
    game03: 3
    };

let substring="game";
let key_value_pairs = Object.entries(obj);
let newObj = {};

key_value_pairs.forEach(element => {
    if(String(element[0]).includes(substring)){
        newObj[element[0]] = element[1];    
    }
}); 
//newObj will now be {game01: 1, game02: 2, game03: 3}