使用正则表达式匹配键名,在JavaScript中循环遍历对象获取值

12
var obj = {
 Fname1: "John",
 Lname1: "Smith",
 Age1: "23",
 Fname2: "Jerry",
 Lname2: "Smith",
 Age2: "24"
}

使用类似这样的对象,我能否使用正则表达式在键名中查找类似于Fname*和Lname*的内容,并获取其值。


这个对象是你自己创建的还是别人创建的? - Blazemonger
5个回答

20

可以的,当然可以。以下是方法:

for(var key in obj) {
    if(/^Fname/.test(key))
        ... do something with obj[key]
}

这是使用正则表达式的方法,但对于简单的任务,您可以使用 indexOf() 函数。如何使用?请看下面:

for(var key in obj) {
    if(key.indexOf('Fname') == 0) // or any other index.
        ... do something with obj[key]
}

如果你想对一个属性列表进行操作,也就是说你想要所有属性的值,可以使用数组来存储这些属性,使用正则表达式/ indexOf 等方法匹配它们,并对这些值做一些操作...我会将这个任务留给你。


@iambriansreed 是的,但我们真的应该劝阻使用像OP所拥有的那样的对象。它在很多方面都是低效的。 - Blazemonger
@iambriansreed 写的对象显然不是JSON格式。 - Blazemonger

7
您可以通过使用更完整的对象来避免整个问题:
var objarr =  [
            {fname: "John",  lname: "Smith", age: "23"},
            {fname: "jerry", lname: "smith", age: "24"}
          ] ;

objarr[0].fname; // = "John"
objarr[1].age;   // = "24"

或者,如果你确实需要一个对象:

var obj =  { people: [
            {fname: "John",  lname: "Smith", age: "23"},
            {fname: "jerry", lname: "smith", age: "24"}
          ]} ;

obj.people[0].fname; // = "John"
obj.people[1].age;   // = "24"

现在,您可以通过变化数组索引轻松地循环遍历数组,而无需使用正则表达式:

for (var i=0; i<obj.people.length; i++) {
    var fname = obj.people[i].fname;
    // do something with fname
}

0

使用includes()快速匹配键

我喜欢新的includes函数。 您可以使用它来检查键是否存在或返回其值。

var obj = {
   Fname1: "John",
   Lname1: "Smith",
   Age1: "23",
   Fname2: "Jerry",
   Lname2: "Smith",
   Age2: "24"
};
var keyMatch = function (object, str) {
for (var key in object) {
    if (key.includes(str)) {
        return key;
    }
}
return false;
};
var valMatch = function (object, str) {
for (var key in object) {
    if (key.includes(str)) {
        return object[key];
    }
}
return false;
};

// usage

console.log(keyMatch(obj, 'Fn')) // test exists returns key => "Fname1"
console.log(valMatch(obj, 'Fn')) // return value => "John"
    

如果您还没有进行ES2015编译,您可以使用:

~key.indexOf(str)


0

使用jQuery:

$.each(obj, function (index,value) {
    //DO SOMETHING HERE WITH VARIABLES INDEX AND VALUE
});

0
values = []
for(name in obj) {
   if (obj.hasOwnProperty(name) && name.test(/Fname|Lname/i) values[name] = obj[name];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接