4

50 個のプロパティを持つ js オブジェクトがあります。「a1」、「a2」、「a3」を除く47個すべてがnullかどうかを確認したい。

myObject = { 
a1: 'dont-care'
a2: 'dont-care'
a3: 'dont-care'
a4: 'am i null?'
a5: 'am i null?'
...
a50: 'am i null?'
}
4

3 に答える 3

2

これはどう:

var allButFirstThreeAreNull = true;
for (var i = 4; i <= 50; i++) {
  if (myObject['a' + i] !== null) {
    allButFirstThreeAreNull = false; 
    break;
  }
}

ここで重要な点は、ブラケット表記 ( object[property_expression]) を使用するときに、複雑な式によってプロパティをアドレス指定できることです。もちろん、null と等しくないプロパティが見つかった場合は、他のプロパティを確認する必要はありません。したがって、の使用break


これらのプロパティは動的であることがわかりました。さて、それを行うには1つのことがあります:

var i, l, isValid = true, props = Object.keys(myObject);
for (i = 3, l = props.length; i < l; i++) {
  if (myObject[ props[i] ] !== null) {
    isValid = false;
    break;
  }
}

... ただし、最初の 3 つのプロパティは、実際には考えているものとは異なる場合があります。たとえば、これを確認します。

var foo = {
  '12': null,
  booya: 3
  '2': null,
  '3': null,
};

その Object.keys をログに記録すると、 が得られ["2", "3", "12", "booya"]、数値プロパティが前に配置されます (そして数値的に並べ替えられます)。

于 2013-06-04T00:01:29.390 に答える