const text = "{a:[1,2,{b:3}],c:{d:4},\"e\":\"qqq\"}";
const json = text.replace(/(?<=[\{,]\s*)([^",\{]*?)(?=\s*:)/g, a=>{
return '"'+a+'"';
});
console.log(text); // {a:[1,2,{b:3}],c:{d:4},"e":"qqq"}
console.log(json); // {"a":[1,2,{"b":3}],"c":{"d":4},"e":"qqq"}
const obj = JSON.parse(json);
const km = [25, 45, 95, 125, 150, 200, 325, 250, 165, 350]
const cof = [1, 1.5, 1, 1.5, 1.2, 1.5, 1 , 0.5, 1.2, 1.5];
// как то так
const res = cof.reduce((a,v,i)=>(a[v]=(a[v]||0)+km[i],a),{});
console.log(res); // { 1: 445, "1.5": 720, "1.2": 315, "0.5": 250 }
console.log(Object.values(res)); // [445, 720, 315, 250];
const person = {
id: 29,
name: "John",
role: "Admin",
salary: 999
};
const templatesSet = [
"/items/%id%/%name%",
"/items/%id%/%role%",
"/items/%id%/%salary%"
];
const pathes = templatesSet.map(t => t.replace(/%(.*?)%/g, (s,k)=>person[k]));
console.log(pathes); // [ "/items/29/John", "/items/29/Admin", "/items/29/999" ]
let promise = new Promise(foo);
promise.then(result => {
alert('done')
});
function foo(resolve, reject) {
$.ajax({
url: ......,
type: 'get',
dataType: 'json',
data: data,
success: function(data) {
// ....
resolve(data);
},
error: function(xhr, textStatus, errorThrown) {
// ...
reject(textStatus);
}
}
}
let promise = new Promise(function (resolve, reject) {
$.ajax({
url: ......,
type: 'get',
dataType: 'json',
data: data,
success: function(data) {
// ....
resolve(data);
},
error: function(xhr, textStatus, errorThrown) {
reject(textStatus);
}
}
});
promise.then(result => {
alert('done')
});
let promise = new Promise(function (resolve, reject) {
foo(resolve, reject);
});
promise.then(result => {
alert('done')
});
function foo(resolve, reject) {
$.ajax({
url: ......,
type: 'get',
dataType: 'json',
data: data,
success: function(data) {
// ....
resolve(data);
},
error: function(xhr, textStatus, errorThrown) {
// ...
reject(textStatus);
}
}
}
var drowSnowman = function(posX, posY) {
function drawCircle(x, y, radius, fillCirсle) {
ctx.beginPath();
if (fillCirсle === true) {
ctx.lineWidth = 4;
ctx.arc(x, y, radius, 0, Math.PI * 2, false);
ctx.stroke();
} else if (fillCirсle === false) {
ctx.arc(x, y, radius, 0, Math.PI * 2, false);
ctx.fill();
}
};
drawCircle(posX+100, posY+100, 30, true);
ctx.fillStyle = "orange";
drawCircle(posX+100, posY+105, 5, false);
ctx.fillStyle = "black";
drawCircle(posX+90, posY+95, 5, false);
drawCircle(posX+110, posY+95, 5, false);
drawCircle(posX+100, posY+170, 40, true);
drawCircle(posX+100, posY+150, 5, false);
drawCircle(posX+100, posY+170, 5, false);
drawCircle(posX+100, posY+190, 5, false);
};
drowSnowman(200,150);
drowSnowman(500,450);
Этот метод позволяет точно добавлять или изменять свойства объекта. Обычное добавление свойств через присваивание создаёт свойства, которые можно увидеть через перечисление свойств (с помощью цикла for...in или метода Object.keys), чьи значения могут быть изменены и которые могут быть удалены. Этот же метод позволяет настроить эти дополнительные детали свойства.
...
enumerable
Равен true только в том случае, если это свойство можно увидеть через перечисление свойств содержащего его объекта.
Значение по умолчанию установлено в false.
Object.defineProperty(obj, 'test', {value: 1, enumerable: true});
Object.defineProperty(obj, 'test2', {value: 1, enumerable: true});