那么让我给你一个示例对象:
{
example_98: value,
example_7658: value,
example_2764: value
key: value,
otherKey: otherValue
}
我想在这个对象中搜索所有example_x
并返回一个类似于的数组:
[{example_98: value}, ...]
在Javascript中执行此操作的最简单方法是什么?我更喜欢纯粹的javascript,但如果能让它更容易,我可以访问jquery。
答案 0 :(得分:2)
您可以通过以下方式获取对象的所有键:
var obj = {
example_98: value,
example_7658: value,
example_2764: value
key: value,
otherKey: otherValue
}
console.log(Object.keys(obj)); // ['example_98', 'example_7658', ...]
要获取其键匹配特定值的所有对象,可以执行以下操作:
var regEx = /example_/;
var onlyExamples = Object.keys(obj)
.filter(function(o) {
// only return keys that match regEx
return o.test(regEx);
})
.map(function(o) {
// return { key: value }
return { o: obj(o) };
});
这将返回一个对象数组,其中仅与正则表达式匹配的值,因此您的示例对象将返回[{example_98: value }, {example_7658: value }, {example_2764: value}]
。
修改强>
正如@andlrc指出的那样,您可以使用以下方法优化您的正则表达式,以便仅使用“示例”选择开始的那些键:var regEx = /^example_/;
答案 1 :(得分:1)
最简单的方法?一个for-in
loop:
var results = [];
for (var key in obj) {
if (key.indexOf('example_') === 0) {
var newObj = {};
newObj[key] = obj[key];
results.push(newObj);
}
}
更有趣/更实用的方式:
var results = Object.keys(obj)
.filter(function(key) {
return key.indexOf('example_') === 0;
})
.map(function(key) {
var newObj = {};
newObj[key] = obj[key];
return newObj;
});
以前使用计算名称的变体(在许多环境中不可用):
var results = Object.keys(obj)
.filter((key) => key.indexOf('example_') === 0)
.map((key) => { [key]: obj[key] });