Console.log показва само актуализираната версия на отпечатания обект

String.prototype.width = function(font) {

  var f = font || '12px arial',
      o = $('<div>' + this + '</div>')
            .css({'position': 'absolute', 'float': 'left', 'white-space': 'nowrap', 'visibility': 'hidden', 'font': f})
            .appendTo($('body')),
      w = o.width();

  o.remove();

  return w;
}


function sortCustomFunction(a, b) {
  if (a['text'].width() < b['text'].width())
     return -1;
  if (a['text'].width() > b['text'].width())
     return 1;
  // a must be equal to b
  return 0;
}

var annoObj = {
        'anno' : [
            //an paikseis me auta (px to teleutaio na mpei prwto kok) oi mikres metatwpiseis ofeilontai sto padding.
            { "label" : "fifth" , "text"  : "This is a sample text another one" , 'color' : 'red' },
            { "label" : "first" , "text"  : "This is a sample" , 'color' : 'grey' },
            { "label" : "second" , "text" : "sample" , 'color' : 'green' },
            { "label" : "sixth" , "text"  : "This is a sample text another one text one mooooorreee" , 'color' : 'lightgreen' },
            { "label" : "third" , "text"  : "another one" , 'color' : 'blue' },
            { "label" : "forth" , "text"  : "one mooooorreee" , 'color' : 'purple' }        
        ]
    };

    console.log(annoObj.anno);   //This should print the unsorted array (but it prints the sorted array).
    annoObj.anno.sort(sortCustomFunction); //Sort the array
    console.log(annoObj.anno);  //This should print the sorted (and it does)

Правя горното и всичко работи добре. Масивът в json обекта е сортиран по стойността на ширината на ключа „текст“ в json елементите на масива. Това, което забелязах, е това странно поведение в console.log. Принтирам масива преди сортиране и след сортиране и в двата отпечатъка е едно и също. Отпечатва сортирания масив. Защо е това?

JSFIDDLE


person Alkis Kalogeris    schedule 26.06.2013    source източник
comment
точен дубликат на Мързелива ли е JavaScript конзолата на Chrome за оценяване на масиви?   -  person Bergi    schedule 26.06.2013
comment
Не знаех тази команда (новак в javascript). Благодаря ти. Публикувайте го като отговор, за който ще гласувам.   -  person Alkis Kalogeris    schedule 26.06.2013
comment
Между другото, наистина трябва да получите .width() на всеки низ само веднъж - това е доста тежко изчисление.   -  person Bergi    schedule 26.06.2013
comment
@Bergi благодаря за предложението. Това е част от по-голяма програма и засега изграждам демонстрация. Персонализирането ще дойде по-късно.   -  person Alkis Kalogeris    schedule 26.06.2013
comment
@Bergi прав си, търсих, но не използвах правилните думи, предполагам, защото се изгубих в предложенията.   -  person Alkis Kalogeris    schedule 26.06.2013
comment
Запазих темата, защото в другата не съществува конзолата за предложения. Променям заглавието, за да е малко по-лесно за намиране.   -  person Alkis Kalogeris    schedule 26.06.2013
comment
@alkis: Вероятно бихте предпочели да намерите някои от дублиращите се въпроси - това конкретно заглавие е твърде сложно за намери без да знаеш :-)   -  person Bergi    schedule 26.06.2013
comment
По дяволите... все пак наистина търсих, може би не много трудно предполагам. Както и да е, следващия път ще бъда по-внимателен.   -  person Alkis Kalogeris    schedule 26.06.2013


Отговори (3)


Нямате проблем със сортирането, но това е добре позната особеност (оптимизация) на повечето конзоли на браузъра: дървото се изгражда само когато отворите обекта, с новите стойности на обекта.

Ако искате да видите състоянието на обекта по време на регистриране, ако приемем, че е достатъчно малък и не се самореферира обект, можете да го клонирате по следния начин:

console.log(JSON.parse(JSON.stringify(annoObj.anno)));
person Denys Séguret    schedule 26.06.2013
comment
Имайте предвид, че ако наистина трябва да регистрирате големи и рекурсивни обекти, имате и решение: JSON.prune.log. Но най-често можете да ограничите вашите трупи до достатъчно малка част. - person Denys Séguret; 26.06.2013

Отговарях на дублиран въпрос от този, когато беше затворен. Точно като свързана интересна бележка, кодовите фрагменти на Stackoverflow отпечатват действителната текуща стойност на обекта, без грешката на браузъра.

let dummyArr = [
    {"name" : "a", "isChecked" : true},
    {"name" : "b", "isChecked" : false},
    {"name" : "c", "isChecked" : true}
];

console.log(dummyArr);
document.getElementById('a').innerHTML = JSON.stringify(dummyArr);

for(var i = 0; i < dummyArr.length ; i++){
    dummyArr[i].isChecked = false;
}

console.log(dummyArr);
document.getElementById('b').innerHTML = JSON.stringify(dummyArr);
<div id="a"></div>
<div id="b"></div>

person alotropico    schedule 17.07.2020

Използвайте console.table за таблично оформление. Поддържа се във Firebug и най-новите версии на Google Chrome.

https://developers.google.com/chrome-developer-tools/docs/tips-and-tricks#console-table

person claustrofob    schedule 26.06.2013
comment
В моя случай не работи според очакванията. Все още се получава само актуализираната стойност. - person Daman Arora; 29.06.2021