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

このようなオブジェクトを使用して、Fname*、Lname* のようなキーで正規表現を使用して値を取得し、値を取得できますか。

4

5 に答える 5

18

はい、できます。方法は次のとおりです。

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]
}

そして、属性のリストを使って何かをしたい場合、つまりすべての属性の値が必要な場合は、配列を使用してそれらの属性を格納し、regex / indexOfを使用してそれらを照合し(便利なものなら何でも)、それらの値で何かを行うことができます...このタスクはあなたに任せます。

于 2012-05-25T16:35:55.653 に答える
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
}
于 2012-05-25T16:31:13.490 に答える
0

jquery の場合:

$.each(obj, function (index,value) {
    //DO SOMETHING HERE WITH VARIABLES INDEX AND VALUE
});
于 2012-05-25T16:32:27.553 に答える
0

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)

于 2015-06-11T09:59:26.943 に答える
0
values = []
for(name in obj) {
   if (obj.hasOwnProperty(name) && name.test(/Fname|Lname/i) values[name] = obj[name];
}
于 2012-05-25T16:31:05.577 に答える