Maxymiser task 06
by Vladimir
HTML
<h1>06 Задание. Функции</h1>
<h2>1. Создать массив из массивоподобного объекта</h2>
<p>Реализовать функцию toArray(obj), которая принимает аргументом массивоподобный объект (например arguments), и возвращает массив из тех же элементов, которые входили в массивоподобный объект.</p>
<code>function someFunc() {
var args = toArray(arguments);
console.log(arguments.forEach); // undefined, метод есть только у массивов.
console.log(args.forEach); // [function], метод есть только у массивов.
}
someFunc(1,2,3,4);</code>
<h2>2. Преобразовать строку запроса (query string) в объект</h2>
<p>
Реализуй функцию queryStringToObject(queryString), которая возвращает объект. Распознавать следующие типы данных: числа, строки, булевы. Помни, что некоторые символы query string могут быть закодированы.</p>
<code>queryStringToObject("user=true"); // {user: true}
queryStringToObject("user=true&age=29"); // {user: true, age: 29}
queryStringToObject("user=true&age=29&name=Evgen"); // {user: true, age: 29, name: "Evgen"}</code>
<h2>3. Найти и исправить объект в структуре</h2>
<p>Есть структура вида:</p>
<code>[{
delta: 5,
value: 5
}, {
delta: -3,
value: 2
}, {
delta: 5,
value: 7
}, {
delta: 0,
value: 7
}]</code>
<p>Она подчиняется следющему правилу: каждый последующий объект массива содержит объект со свойствами delta и value. delta - разница значений value с предыдущим объектом.</p>
<p>У тебя есть экземпляр структуры, и достоверно известно, что один (и только один) из элементов имеет неверное значение delta и value, и что этот элемент не является ни первым, ни последним. Необходимо написать функцию fixStruct(struct), которая изменяет неверное значение таким образом, чтобы его delta и value снова подчинялись правилу, описанному выше.</p>
<code>var struct = [{
delta: 0,
value: 1
}, {
delta: 0,
value: 0
}, {
delta: 3,
value: 5
}];
console.log(fixStruct(struct));
/* [{
delta: 0,
value: 1
}, {
delta: 1,
...
CSS
body {
font-family: Verdana, sans-serif;
}
code {
display: block;
background: #EEE;
white-space: pre;
padding: 5px;
}
JavaScript
//* задача 1
function toArray(obj) {
var arr = [];
for(var i = 0; i < obj.length; i++) {
arr.push(obj[i]);
}
return arr;
//more powerfull solution
// return [].slice.apply(obj) || Array.prototype.slice.apply(obj)
}
//* Задача 2
function queryStringToObject(queryString) {
var obj = {};
if(queryString) {
var parts = queryString.split('&');
for(var i = 0 ; i < parts.length; i++) {
var subparts = parts[i].split('=');
if(subparts[1] == 'true' || subparts[1] == 'false') {
subparts[1] = subparts[1] == 'true';
} else if(parseFloat(subparts[1]) == subparts[1]) {
subparts[1] = parseFloat(subparts[1]);
} else {
subparts[1] = decodeURIComponent(subparts[1]);
}
obj[subparts[0]] = subparts[1];
}
}
return obj;
}
//* Задача 3
function fixStruct(struct) {
for(var i = 1; i < struct.length-1; i++) {
if(struct[i].value != struct[i-1].value + struct[i].delta) {
struct[i].value = struct[i+1].value - struct[i+1].delta;
struct[i].delta = struct[i].value - struct[i-1].value;
}
}
return struct;
}
//* Задача 4
function getUnique(list) {
var res = [];
for(var i = 0; i < list.length; i++) {
var isExist = false;
for(var j = 0; j < res.length; j++) {
if(res[j] === list[i]) {
isExist = true;
break;
}
}
if(!isExist) {
res.push(list[i]);
}
}
return res;
}
//* Задача 5
function createSummator(initialValue) {
var count = initialValue || 0;
return {
inc: function(a) {
count += a || 1;
},
dec: function(b) {
count -= b || 1;
},
get: function() {
return count;
}
};
}