Вы можете перебрать свой Object.entries
и посмотреть на каждый ключ с помощью регулярного выражения, чтобы увидеть, начинается ли он с цифры. Если это так, добавьте его к соответствующему подобъекту:
let myObj = {'1-inputWidth' : '30px' , '1-inputHeight': '30px', '1-color' : 'red','2-inputWidth' : '20px' , '2-inputHeight': '10px', '2-color' : 'blue','3-inputWidth' : '60px' , '3-inputHeight': '70px', '3-color' : 'white', '4-inputWidth' : '90px' , '4-inputHeight': '10px', '4-color' :'yellow', scroll : 'auto', 'z-index' : 1}
let o = Object.entries(myObj)
.reduce((obj, [k, v]) => {
let num = k.match(/^\d+/) // get number in key?
if (num) { // was there a match?
if (obj[num]) obj[num][k] = v // add new entry
else obj[num] = {[k]: v}
}
return obj
}, {})
console.log(o)
Статья, которую Вы заключили в кавычки, содержит ссылку на Продолжения, Сделанные Простой И Проиллюстрированный в разделе Resources, который говорит о продолжениях на языке Python.
смотрите на оператор урожая для создания генераторов.
Я не говорю рубина, но кажется на поиск этого:
def loop():
for i in xrange(1,5):
print i
if i == 2:
yield
for i in loop():
print "pass"
Править: Я понимаю, что это - в основном специализация реальных продолжений, но это должно быть достаточно в большинстве целей. Использовать yield
возвратить продолжение и .next()
сообщение на генераторе (возвращенный, просто звоня loop()
) повторно вступить.
Используя generator_tools
(для установки:'$ easy_install generator_tools
'):
from generator_tools import copy_generator
def _callg(generator, generator_copy=None):
for _ in generator: # run to the end
pass
if generator_copy is not None:
return lambda: _callg(copy_generator(generator_copy))
def loop(c):
c.next() # advance to yield's expression
return _callg(c, copy_generator(c))
if __name__ == '__main__':
def loop_gen():
i = 1
while i <= 4:
print i
if i == 2:
yield
i += 1
c = loop(loop_gen())
print("c:", c)
for _ in range(2):
print("c():", c())
Вывод:
1
2
3
4
('c:', <function <lambda> at 0x00A9AC70>)
3
4
('c():', None)
3
4
('c():', None)
def loop():
def f(i, cont=[None]):
for i in range(i, 5):
print i
if i == 2:
cont[0] = lambda i=i+1: f(i)
return cont[0]
return f(1)
if __name__ == '__main__':
c = loop()
c()