// ...
$('input').each(function (index) {
$(this).val(decode[index]);
});
0, 1, 2, ...
И если разметка документа не менялась, можно надеяться, что порядок найдённых input'ов будет тот же, что и при сохранении значений. Способ не гарантирует попадание значения в нужный input, но в простом случае упражнения сработает.id
и сохранять их вместе со значениями. При восстановлении обращаться к элементам по id
. lodash
пишут в документации Sails:Async (async
) and Lodash (_
)
Sails also exposes an instance of lodash as_
, and an instance of async asasync
. These commonly-used utilities are provided by default so that you don't have to npm install them in every new project. Like any of the other globals in sails, they can be disabled.
globals.js
предназначен только для отключения некоторых глобалов-по-умолчанию:// config/globals.js
module.exports.globals = {
_: false,
async: false,
models: false,
services: false
};
_: require('lodash')
воспринимается, видимо, так же, как и _: true
– т.е. просто не-запрещает эту глобальную переменную.let one = ['one', 'two', 'three', 'four', 'five'];
let two = ['a', 'b', 'five', 'c', 'one'];
const [long, short] = one.length > two.length ? [one,two] : [two,one];
short.sort();
const shortLength = short.length;
const binSearch = needle => {
let start = 0, finish = shortLength - 1;
while (start <= finish) {
const center = Math.floor((start + finish) / 2);
if (short[center] < needle) start = center + 1;
else if (short[center] > needle) finish = center - 1;
else return true;
}
return false;
}
const result = [];
for (let i = 0, length = long.length; i < length; i++)
if (binSearch(long[i])) result.push(long[i]);
result // ["five","one"]
возраст 6 бит, количество курсов 3 бита
0 пол
1 семейное положение (женат / не женат)
2–7 возраст (6 бит запишут значения 0..63 точно хватит?)
8–10 количество курсов
11 присутствие
const encode = (sex, family, age, classes, presence) =>
(1 & sex) << 0 |
(1 & family) << 1 |
(63 & age) << 2 |
(7 & classes) << 8 |
(1 & presence) << 11
;
const decode = n => ({
sex : n >> 0 & 1,
family : n >> 1 & 1,
age : n >> 2 & 63,
classes : n >> 8 & 7,
presence : n >> 11 & 1,
});
неженатых женщин, с возрастом от 25 до 30 включительно, без курсов и с присутствием.
const mask = encode(1, 0, 25, 0, 1);
data.filter(n => n === mask); // нужно полное равенство маски и числа, как я понял?
data.filter(n => (n & 0xFFF) === mask);
const masks = [];
for(let i=25; i<=30; i++) masks.push( encode(1, 0, i, 0, 1));
data.filter(n => masks.includes(n & 0xFFF));
let i = 0; // i = 0
while (i++ < 5) { // i = 0 сравнивают с 5. Меньше. Ок.
// После этого i стало = 1
alert( i ); // вывели 1
}
// следующая итерация
while (i++ < 5) { // i = 1 сравнивают с 5. Меньше. Ок.
// После этого i стало = 2
alert( i ); // вывели 2
// следующие итерации
// i = 2 -> 3
// i = 3 -> 4
// i = 4 -> 5
// следующая итерация
while (i++ < 5) { // i = 5 сравнивают с 5. Не меньше. Равно. Не ок!
// вышли из цикла
optimization: {
minimizer: [
new UglifyJsPlugin({
sourceMap: true
})
]
},
const customObj = (({ second, third }) => ({ second, third }))(obj);
const obj = {
first: 123,
second: 154,
third: 654,
fourth: 993
};
const customObj = (({ second, third }) => ({ second, third }))(obj);
customObj // { second: 154, third: 654 }
js я вообще не знаю. просто решил попробовать изучать по мере выполнения задачЭто не та задача, с которой стоит начинать изучение JS.
function declOfNum(number, titles) {
cases = [2, 0, 1, 1, 1, 2];
return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
}
// использование: в массиве передавать формы для 1, 4 и 5 «штук»
declOfNum(count, ['найдена', 'найдено', 'найдены']);
srcconst total = 10;
const totalWords = ['упражнения', 'упражнений', 'упражнений'];
const newTotal = 'Составить тренировку из ' + total + ' ' + declOfNum(total, totalWords);
lib/defaults.js
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.common['Authorization'] = NEW_TOKEN;
axios.get('https://google.com').then(r => console.log(r));
Array.of()
позволяет привязать контекст, иной, нежели Array
.function Stack(){}
Stack.prototype = Object.create(Array.prototype);
Stack.prototype.last = function(){return this[this.length-1]}; // вернуть последний элемент
const testArr = Array.of.call(Stack, 1, 2, "три!");
.last()
console.log(testArr.last()); // "три!"
0.3 - 0.1 // 0.19999999999999998
x = new Decimal(0.3)
x.minus(0.1) // '0.2'
$('#datePicker').datepicker();
$('#datePicker').datepicker({
dateFormat: "dd.mm.yyyy"
});
const hasCommon = (a, b) => undefined !== a.find(v => b.includes(v))
const tests = [
[[1,11,111], [2,3], false],
[[1,11,111,4,5], [2,3,4], true],
[[2,3,4], [1,11,111,4,5], true],
[[1,11,111,'A',{a:'aaa'}], [2,3,'a',{}], false],
[[1,11,111,undefined], [2,3,undefined], false],
[[1,11,111,2,undefined], [2,3,undefined], true],
];
tests.forEach(t => console.log(t[2] === hasCommon(...t)?'OK':'FAIL', JSON.stringify(t)))
let $some_elem = $('.some_elem'); // 1
$some_elem.addClass('some_class'); // 2
setTimeout(() => alert("Созрели!"), 1000); // 3 отложили
$('.some_class').remove(); // 4
// этот код выполнился до конца и, казалось бы, делать больше нечего.
// ...через секунду сработал alert
setTimeout()
отрабатывает мгновенно-синхронно - его функция отложить личинку на через-секунду. Представьте, что setTimeout пушит функцию и её время в некий невидимый служебный массив движка JS. А движок заглядывает в этот массив по 100 раз в секунду, когда свободен, не занят выполнением кода, и смотрит, «есть чё?», что пора выполнить?setTimeout()
(но никакого alert ещё не случилось) выполняется следующая строка $('.some_class').remove();