如何预填充包含一些 css 属性的 JSON 对象。我需要在哪里将所有未包含的属性添加到前一个对象,并且为所有下一个项目添加相同的属性?
我需要的声明:
if (property is not in object) object[property] = $('.foo').css(property);
例如,我们有一个具有以下样式的元素:
.foo {
top: 0;
width: 100px;
}
以及以下keyframe
类似对象:
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
-object 中有哪些属性...所以它可以是,关键帧中有更多/其他属性而不是width
和top
。
更新2
目前我有以下内容:
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...
有任何想法吗?