web-dev-qa-db-ja.com

JavaScriptオブジェクトに特定の文字列で始まるプロパティ名があるかどうかを確認します

このようなJavaScriptオブジェクトがあるとしましょう:

_addr:housenumber: "7"
addr:street: "Frauenplan"
owner: "Knaut, Kaufmann"
_

オブジェクトにaddrで始まるプロパティ名があるかどうかを確認するにはどうすればよいですか?私は次のように何かを想像しますすべき可能です:

_if (e.data[addr*].length) {
_

RegExp.match()を試しましたが、役に立ちませんでした。

17
Alexander Rutz

boolを返すArray.someを使用して、オブジェクトのキーと照合できます。

if(Object.keys(obj).some(function(k){ return ~k.indexOf("addr") })){
   // it has addr property
}

Array.filterを使用して、長さを確認することもできます。ただし、ここではArray.someの方が適しています。

34
Amit Joki

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)とキーの特定の名前が得られますが、存在をテストするだけの場合は、filtersomeに置き換えるだけです。

7
Ethan Lynn
Obj = {address: 'ok', x:5}

Object.keys(obj).some(function(prop){
  return ~prop.indexOf('add')
}) //true
4
Edwin Reynoso

これを試して:

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;
    }
}
0
Krzysztof Trzos

関数を書くことができます

function check(model) {
   var keys = [];
   for (key in model) { 
       if(key.indexOf("addr") > -1) 
           keys.Push(key); 
   }
   return keys;
}
0
Mahib

なぜか

var foo = {'bar':'funtimes'};
if (foo.bar.includes('fun')) {
  console.log('match');
}
0
Bwyss

オブジェクトのプロパティを「クエリ」することは不可能だと思います。プロパティを個別にループして、一致するかどうかを判断する必要があります。このようなもの...

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を返した場合にプロパティを処理できます...

0
Spock