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?'
}
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?'
}
これはどう:
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"]
、数値プロパティが前に配置されます (そして数値的に並べ替えられます)。