Задать вопрос
Ответы пользователя по тегу JavaScript
  • Checkbox Group?

    @Interface
    codepen.io/Int0h/pen/JEzwxm

    По второму пункту:
    Можно повесить (что я и сделал) на общего родителя обработчик onclick, а там задавать checked если все чекбоксы проставленны (можно сделать с помощью es5 - Array.every)
    Ответ написан
    2 комментария
  • Работа с объектами в JS?

    @Interface
    Судя по всему, вы обрезали часть с как раз таки заданием, потому как на картинке просто повествование. Что сделать из него (мне лично) не ясно.

    Если надо эту ситуацию представить в коде, то я бы представил это в виде объекта для каждого студента, который содержит произвольный набор языков с информацией об уровне и интенсивности.

    John = {
        "english": {
            level: "basic",
            intensity: 3/7
        },
        "french": {
            level: "advanced",
            intensity: 1/7
        }
    }


    Возможно вам помогут лучше\быстрее если сформулируете задачу полностью.
    Ответ написан
    Комментировать
  • Как на JS создать цикл для неупорядоченного массива?

    @Interface
    Ну тут напрашивается обычный цикл for (key in array){...}

    UPDATE
    :
    Если вам действительно нужно обрабатывать огромные разреженные массивы на javascript и подвешивать процесс не желательно (что на самом то деле надо избегать вообще), то можно попробовать делать это асинхронно как писали Константин Отпущенников и evg_ (однако они не предложили как можно итерировать объект асинхронно, а нам нужна итерация именно объекта, а не массива в данном случае). Так вот я нашел одно решение, оно довольно.. кхм.. специфическое, если придумаете способ лучше - пишите. Проблема в том, что мы можем перебрать часть свойств мегообъекта и break'нуться из цикла, но мы не сможем вернуться в то же место, поэтому надо как-то добиться запоминания состояния цикла... и единственное, что я нашел - это удалять элементы первоначального объекта (их можно и восстановить в другой, но вы это можете добавить сами если будет нужно).
    Особенности метода:
    - изменение изначального объекта;
    - скорость просядет на порядки (без преувеличений, у меня этот способ оказался в 200 - 400 раз медленее);
    - зато можно не вешать всю страницу;
    - выбирать порцию данных за один проход (чем больше, тем медленнее алгоритм для одной части (больше тормозов на странице), за то быстрее обработка в целом);
    - можно повесить прогресс бар, отображающий прогресс итерации;

    Код:
    var arr = [];
    for (var i = 0; i < 100 * 1000; i++){
    	arr.push(i);
    };
    
    function bench(name, fn){
    	var startTime = performance.now();
    	var res = fn();
    	var finishTime = performance.now();
    	console.log(name + ' took: ', finishTime - startTime);
    	return res;
    };
    
    bench('get keys', ()=>
    	Object.keys(arr) // ~670 ms
    );
    
    // --------------
    
    function getKeyValAsync(bigObject, limit, cb){
    	var result = [];
    
    	function getPart(){
    		var doneAmount = 0;
    		for (var i in bigObject){
    			if (!bigObject.hasOwnProperty(i)){
    				continue;
    			};
    			result.push({
    				key: i,
    				val: bigObject[i]
    			});			
    			delete bigObject[i];
    			doneAmount++;
    			if (doneAmount > limit){
    				setTimeout(() => bench('part: ', getPart), 10);
    				return;
    			};
    		};
    		cb(result);		
    	};
    
    	getPart();
    };
    
    var keyValPairs;
    var start = performance.now();
    getKeyValAsync(arr, 10000, res => {
    	keyValPairs = res;
    	console.log('By parts time: ' + (performance.now() - start));
    });
    Ответ написан
    8 комментариев
  • Почему в условии "o" есть true в Javascript?

    @Interface
    Судя по этой конструкции:
    var wincomb = innerArr[i][j] && innerArr[i][j+1] && innerArr[i][j+2];

    я так понимаю, вы расчитываете, что в переменной wincomb окажется "X". Однако, там окажется булева переменная, т.е. true/false. При этом false там будет, если каждый из этих:
    innerArr[i][j];
    innerArr[i][j+1];
    innerArr[i][j+2];

    элементов будет пустой строкой.
    Затем вы сравниваете if(wincomb == "X"){
    результат (булева переменная) со строкой, которая приведется также к булевой, а так как строка это "Х", то всегда будет приводиться к true.

    В вашем случае в коде довольно сложно разобраться, поэтому исправить вашу проблему затруднительно. Скорее всего лучше будет писать заново большую часть. Советую обратить внимание на правописание англоязычных переменных.
    Ответ написан
  • Как вызвать метод несколько раз в зависимости от возвращаемого результата?

    @Interface
    Попробуйте так:
    var field = 0; // init value
    
    function callback(result){
    	field = result.field;
    	if (field < 10){
    		object.foo(field, callback);
    	};
    };
    object.foo(field, callback);

    https://jsfiddle.net/pmceqnck/

    Возможно object.foo - асинхронный, тогда метод Finesse (если я не ошибаюсь не работает)
    Ответ написан
    2 комментария