我正在做这样的事情:
我的对象看起来像这样:
{
a: 1,
b: 2,
c: 3,
game01: 1,
game02: 2,
game03: 3
}
我需要做的是从中返回一个仅包含最后3对的对象,因此它看起来像这样:
{
game01: 1,
game02: 2,
game03: 3
}
我不希望手动进行此操作,但是最好使用类似过滤数组的方法。
谢谢!
答案 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}