0

いくつかの css プロパティを含む JSON オブジェクトを事前設定するにはどうすればよいですか。含まれていないすべてのプロパティを前のオブジェクトに追加し、次のすべてのアイテムに同じものを追加する必要があるのはどこですか?

私が必要とする声明:

if (property is not in object) object[property] = $('.foo').css(property);

たとえば、次のスタイルの要素があります。

.foo {
    top: 0;
    width: 100px;
}

そして、次のkeyframe-alike オブジェクト:

var keyframe = {
    0: {
        top: 0
    },
    1000: {
        top: 100
    },
    2000: {
        width: 100
    }
};

ここでは、前のすべての項目を入力する必要があります。この場合は次のとおりです。

  • 0: width = 0
  • 1000: width = 0

...次のような結果が得られます。

var keyframe = {
    0: {
        top: 0,
        width: 0
    },
    1000: {
        top: 100,
        width: 0
    },
    2000: {
        top: 100,
        width: 100
    }
};

...さらに、次のすべての項目を事前に入力する必要があります。

  • 2000: top = 100

結果:

var keyframe = {
    0: {
        top: 0
    },
    1000: {
        top: 100
    },
    2000: {
        top: 100,
        width: 100
    }
};

最終的なオブジェクトは次のようにする必要があります。

var keyframe = {
    0: {
        top: 0,
        width: 0
    },
    1000: {
        top: 100,
        width: 0
    },
    2000: {
        top: 100,
        width: 100
    }
};

アップデート

TJ Crowderの回答はこれまでのところ良さそうに見えますが、問題keyframeは-objectwidthにあるプロパティがわからないことtopです.

Update2

現在、私は次のものを持っています:

var $foo = $('.foo');
for (var key in keyframe) {
    var obj = keyframe[key];
    for(var ok in obj) {
        if (!(ok in obj)) obj[ok] = $foo.css(ok);
    }
}

しかし、それは

if (!(ok in obj)) // is always `truthy`

ただし、直接宣言して行う場合

if (!('top' in obj)) // it works...

何か案は?

4

2 に答える 2