このようなJavaScriptオブジェクトがあるとしましょう:
_addr:housenumber: "7"
addr:street: "Frauenplan"
owner: "Knaut, Kaufmann"
_
オブジェクトにaddr
で始まるプロパティ名があるかどうかを確認するにはどうすればよいですか?私は次のように何かを想像しますすべき可能です:
_if (e.data[addr*].length) {
_
RegExp
と.match()
を試しましたが、役に立ちませんでした。
bool
を返すArray.some
を使用して、オブジェクトのキーと照合できます。
if(Object.keys(obj).some(function(k){ return ~k.indexOf("addr") })){
// it has addr property
}
Array.filter
を使用して、長さを確認することもできます。ただし、ここではArray.some
の方が適しています。
Object.keys
関数を使用してキーの配列を取得し、filter
メソッドを使用して"addr"
で始まるキーのみを選択できます。
var propertyNames = Object.keys({
"addr:housenumber": "7",
"addr:street": "Frauenplan",
"owner": "Knaut, Kaufmann"
}).filter(function (propertyName) {
return propertyName.indexOf("addr") === 0;
});
// ==> ["addr:housenumber", "addr:street"];
これにより、存在(propertyNames.length > 0
)とキーの特定の名前が得られますが、存在をテストするだけの場合は、filter
をsome
に置き換えるだけです。
Obj = {address: 'ok', x:5}
Object.keys(obj).some(function(prop){
return ~prop.indexOf('add')
}) //true
これを試して:
var myObject = {
'prop1': 'value1',
'xxxxx': 'value2'
};
var stringToCheck = 'addr';
for(var propertyName in myObject) {
var x = propertyName.substr(0, stringToCheck.length - 1);
if(x == stringToCheck) {
return true;
}
}
関数を書くことができます
function check(model) {
var keys = [];
for (key in model) {
if(key.indexOf("addr") > -1)
keys.Push(key);
}
return keys;
}
なぜか
var foo = {'bar':'funtimes'};
if (foo.bar.includes('fun')) {
console.log('match');
}
オブジェクトのプロパティを「クエリ」することは不可能だと思います。プロパティを個別にループして、一致するかどうかを判断する必要があります。このようなもの...
function findProp(e, prop)
{
for(var o in e.data){
if(o.substr(0, prop.length)==prop) //<- you could try the regex or match operation here
return true;
}
return false;
}
alert(findProp({data:{addr:{street:"a", sub:"b"}}}, 'addr'));
次に、findPropがtrueを返した場合にプロパティを処理できます...