Показать сообщение отдельно
  #107 (permalink)  
Старый 23.11.2012, 18:11
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

> вот тебе контр пример: https://github.com/devote/QSA/blob/master/qsa.js

какой пиздец.. и где там _необходимо_ модифицировать итерируемый массив?

вот пример более грамотной архитектуры для выборки по селектору
function jpath( path ){ // jpath 3a1
    var cache= jpath.cache
    var result= cache[ path ]
    if( result ) return result
    
    var types= jpath.types
    var processors= []
    path.replace
    (   /([.])([^.\s]*)/g
    ,   function( str, type, name ){
            processors.unshift( types[ type ]( name ) )
        }
    )
    
    return cache[ path ]= function( ){
        var list= [].slice.call( arguments )
        for( var i= processors.length; --i >= 0 && list.length ; ){
            list= processors[ i ]( list )
        }
        return list
    }
}
jpath.cache= {}
jpath.types= {}
    
jpath.types[ '.' ]= function( name ){
    if( !name ) return function( list ){
        var result= []
        list.forEach( function( value ){
            for( var name in value ){
                var val= value[ name ]
                if( val == null ) continue
                result.push( val )
            }
        })
        return result
    }
    
    return function( list ){
        if( list.length === 1 ){
            value= list[ 0 ]
            if( value == null ) return []
            return[ value[ name ] ]
        }
        
        var result= []
        list.forEach( function( value ){
            var val= value[ name ]
            if( val == null ) return
            result.push( val )
        })
        return result
    }
}

console.log( jpath( '. .a .length' )( [ 123, { a: "12" }, 0 ] ) )



> хотя то как ты тут общаешься, боюсь программирование в JS на более низком уровне, для тебя темный лес... Что же поделаешь, судьба всех джукверистов.

да тут куда не плюнь попадёшь в какого-нибудь низкоуровневого специалиста
__________________
.ня
Ответить с цитированием