var obj = {
Fname1: "John",
Lname1: "Smith",
Age1: "23",
Fname2: "Jerry",
Lname2: "Smith",
Age2: "24"
}
このようなオブジェクトを使用して、Fname*、Lname* のようなキーで正規表現を使用して値を取得し、値を取得できますか。
var obj = {
Fname1: "John",
Lname1: "Smith",
Age1: "23",
Fname2: "Jerry",
Lname2: "Smith",
Age2: "24"
}
このようなオブジェクトを使用して、Fname*、Lname* のようなキーで正規表現を使用して値を取得し、値を取得できますか。
はい、できます。方法は次のとおりです。
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を使用してそれらを照合し(便利なものなら何でも)、それらの値で何かを行うことができます...このタスクはあなたに任せます。
代わりに、より完全なオブジェクトを使用することで、問題全体を回避できます。
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
}
jquery の場合:
$.each(obj, function (index,value) {
//DO SOMETHING HERE WITH VARIABLES INDEX AND VALUE
});
新しいインクルード機能が気に入っています。これを使用して、キーの存在を確認したり、その値を返したりできます。
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)
values = []
for(name in obj) {
if (obj.hasOwnProperty(name) && name.test(/Fname|Lname/i) values[name] = obj[name];
}