JSFiddle - React, Tailwind, and code Playground

by kein1945

HTML

<input type="button" id="run" value="run">

JavaScript

document.getElementById('run').onclick = function(){
    debuger;
    var item_collector = function(){
		var items = {}
		var observers = []
		this.addObserver = function('event',callback_func){
			observers.push( callback_func )
		}
		this.fireEvent
		this.addItem = function(tag, obj){
			if(typeof items[tag] == 'undefined'){
				items[tag] = []
			}
			items[tag].push(obj)
		}
		this.replaceItem = function(tag, obj){
			items[tag] = []
			this.addItem(tag, obj)
		}
		this.reduce = function(callback_func, sum){
			sum = sum | 0
			this.each(function(tag, obj){
				sum += callback_func(tag, obj)
			})
			return sum
		}
		this.each = function(callback_func){
			for(tag in items){
				var tagged = items[tag]
				for(var i = 0; i<tagged.length; i++){
					callback_func(tag, tagged[i])
				}
			}
		}
		this.removeTag = function(tag){
			delete items[tag]
		}
	}

    var observable_items_collector = function(){
        this.observers = new item_collector()
    }
    observable_items_collector.prototype = {
        addItem: function(tag, obj){
            this.proto.addItem(tag, obj)
            this.fireEvent('addItem')
        }
        fireEvent: function(event){
            this.observers.each(function(tag, obj){
                if(tag == event){
                    obj(event)
                }
            })
        }
        
        removeTag: function(tag, obj){
            this.proto.addItem(tag, obj)
            this.fireEvent('removeTag')
        }
    }
    var ii = new observable_items_collector()
    ii.observers.addItem('addItem', function(){
        console.log('ImetAdded')
    })
    ii.addItem('car', {label: 'Hey', price: 15000})
    ii.addItem('mote', {label: 'Hey', price: 15000})
    console.log(item_collector.reduce(function(tag, obj){ return obj.price}))
}