Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 02.06.2012, 23:56
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от cyber Посмотреть сообщение
мне именно он и нужен , тот который браузер использует когда вызвается sort
ArrayPrototype.cpp
Удачи
Код:
EncodedJSValue JSC_HOST_CALL arrayProtoFuncSort(ExecState* exec)
{
    JSObject* thisObj = exec->hostThisValue().toObject(exec);
    unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
    if (!length || exec->hadException())
        return JSValue::encode(thisObj);

    JSValue function = exec->argument(0);
    CallData callData;
    CallType callType = getCallData(function, callData);

    if (thisObj->classInfo() == &JSArray::s_info && !asArray(thisObj)->inSparseMode()) {
        if (isNumericCompareFunction(exec, callType, callData))
            asArray(thisObj)->sortNumeric(exec, function, callType, callData);
        else if (callType != CallTypeNone)
            asArray(thisObj)->sort(exec, function, callType, callData);
        else
            asArray(thisObj)->sort(exec);
        return JSValue::encode(thisObj);
    }

    // "Min" sort. Not the fastest, but definitely less code than heapsort
    // or quicksort, and much less swapping than bubblesort/insertionsort.
    for (unsigned i = 0; i < length - 1; ++i) {
        JSValue iObj = thisObj->get(exec, i);
        if (exec->hadException())
            return JSValue::encode(jsUndefined());
        unsigned themin = i;
        JSValue minObj = iObj;
        for (unsigned j = i + 1; j < length; ++j) {
            JSValue jObj = thisObj->get(exec, j);
            if (exec->hadException())
                return JSValue::encode(jsUndefined());
            double compareResult;
            if (jObj.isUndefined())
                compareResult = 1; // don't check minObj because there's no need to differentiate == (0) from > (1)
            else if (minObj.isUndefined())
                compareResult = -1;
            else if (callType != CallTypeNone) {
                MarkedArgumentBuffer l;
                l.append(jObj);
                l.append(minObj);
                compareResult = call(exec, function, callType, callData, jsUndefined(), l).toNumber(exec);
            } else
                compareResult = (jObj.toUStringInline(exec) < minObj.toUStringInline(exec)) ? -1 : 1;

            if (compareResult < 0) {
                themin = j;
                minObj = jObj;
            }
        }
        // Swap themin and i
        if (themin > i) {
            thisObj->methodTable()->putByIndex(thisObj, exec, i, minObj, true);
            if (exec->hadException())
                return JSValue::encode(jsUndefined());
            thisObj->methodTable()->putByIndex(thisObj, exec, themin, iObj, true);
            if (exec->hadException())
                return JSValue::encode(jsUndefined());
        }
    }
    return JSValue::encode(thisObj);
}
Ответить с цитированием
  #22 (permalink)  
Старый 03.06.2012, 00:01
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

спасибо это мне на долго
Ответить с цитированием
  #23 (permalink)  
Старый 03.06.2012, 00:06
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от cyber Посмотреть сообщение
спасибо это мне на долго
Неа.

Этот комментарий даёт наводку.
Цитата:
// "Min" sort. Not the fastest, but definitely less code than heapsort
// or quicksort, and much less swapping than bubblesort/insertionsort
Похож же исходный код?
Код:
template <class Item>
void selection(Item a[],int l,int r){
    for(int i=l;i<r;i++){
        int min=i;
        for(int j=i+1;j<r+1;j++){
            if( a[j]< a[min])
                min=j;
        }
        if(a[min]!=a[i]) /* эта проверка делается только в устойчивых реализациях */
            exch(a[i],a[min]);
    }
}
Значит это Сортировка выбором.
Ответить с цитированием
  #24 (permalink)  
Старый 03.06.2012, 00:28
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

я это хотел немного по другой причине узнать , а не сам алгоритм=)
document.getElementById("bt_Block").childNodes

данный код возвращает object Nodelist и у меня возникла идея сделать так
var obj = document.getElementById("bt_Block").childNodes;
var s = [].sort;
s.call.sort (obj, func);
Ответить с цитированием
  #25 (permalink)  
Старый 03.06.2012, 00:38
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от melky
Похож же исходный код?
Ага, похож: ни там ни там ничё непонятно
Ответить с цитированием
  #26 (permalink)  
Старый 03.06.2012, 00:40
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от cyber
данный код возвращает object Nodelist и у меня возникла идея сделать так
cyber,
Это делается так
var obj = document.getElementById("bt_Block").childNodes;
obj = Array.prototype.slice.call(obj);
Ответить с цитированием
  #27 (permalink)  
Старый 03.06.2012, 00:42
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Раед Посмотреть сообщение
cyber,
Это делается так
var obj = document.getElementById("bt_Block").childNodes;
obj = Array.prototype.slice.call(obj);
спс, до прототипного программирования я еще не дошел=)
Ответить с цитированием
  #28 (permalink)  
Старый 03.06.2012, 00:56
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

я так понимаю такой фокус не прокатит избавить от текстовых узлов
<div class="bt_inp_Block" id="bt_Block" >
<input type="text"  class="inp_Out_color"  value='выбор цвета >>' disabled="disabled" />
<input type="button" value="Color" class="start_Button" >
</div>
    <script>

      function sortChild (obj){
      
        if (obj.nodeType == 1)return obj;
       }
     var obj = document.getElementById("bt_Block").childNodes;
	obj = Array.prototype.slice.call(obj);

     alert(obj.sort(sortChild))
 



    </script>
Ответить с цитированием
  #29 (permalink)  
Старый 03.06.2012, 02:43
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

<div class="bt_inp_Block" id="bt_Block" >
<input type="text"  class="inp_Out_color"  value='выбор цвета >>' disabled="disabled" />
<input type="button" value="Color" class="start_Button" >
</div>
    <script>
 
      function sortChild (obj){
       
        if (obj.nodeType == 1) return true;
        return false
       }
     var obj = document.getElementById("bt_Block").childNodes;
    obj = Array.prototype.filter.call(obj, sortChild);
 
     alert(obj)
  
 
    </script>

Последний раз редактировалось Раед, 03.06.2012 в 04:11.
Ответить с цитированием
  #30 (permalink)  
Старый 03.06.2012, 03:50
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Раед Посмотреть сообщение
<div class="bt_inp_Block" id="bt_Block" >
<input type="text"  class="inp_Out_color"  value='выбор цвета >>' disabled="disabled" />
<input type="button" value="Color" class="start_Button" >
</div>
    <script>
 
      function sortChild (obj){
       
        if (obj.nodeType == 1) return true;
        return false
       }
     var obj = document.getElementById("bt_Block").childNodes;
    obj = Array.prototype.filter.call(obj, sortChild);
 
     alert(obj)
  
 
    </script>

filter
это типо ссылка на стандартный метод?
спс что помогаете=)

Последний раз редактировалось cyber, 03.06.2012 в 05:03.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите понять поведение скрипта demoniqus Общие вопросы Javascript 3 02.03.2012 09:58
помогите понять jquery Xaver jQuery 0 13.04.2011 13:25
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Помогите понять куда копать warobushek Общие вопросы Javascript 10 13.05.2010 19:25
Помогите понять что надо "Удобное дерево" Fridrih AJAX и COMET 2 02.04.2010 10:12