Как я могу предварительно заполнить объект JSON, который содержит некоторые css-свойства. Где мне нужно добавить все свойства не содержащиеся к предыдущему объекту и то же самое для всех следующих элементов?
Заявление мне нужно:
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
}
};
Обновлять
Т.Дж. Ответ Краудера пока выглядит неплохо, однако проблема в том, что я не знаю, какие свойства находятся в keyframe
-объекте ... Так что может быть, есть еще / другие свойства в ключевом кадре, чем 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...
Любые идеи?