canvas
потребуется именно браузерный движок, поэтому Puppeteer или модуль node-canvas — все подтянут тяжёлый бинарник Chromium под платформу. const buckets = {voiceAssistants: 410, thermostats: 93, lighting: 1300};
const prices = {voiceAssistants: '9.99$', thermostats: '74.99$', lighting: '49.50$'};
const totals = Object.keys(prices).reduce((acc, c) => acc + buckets[c] * parseFloat(prices[c]), 0);
// всё равно не то что-то: 75419.97
div
let a = [{v: 1}, {v: 2}, {v: 3}];
for (let obj of a) {
obj.v += 1;
}
a // [{"v":2},{"v":3},{"v":4}]
const el = document.querySelector('span.qodef-e-price-value.qodef-e--value');
el.removeChild(el.childNodes[0]);
ctx.translate(x, y)
и поворачивать на угол ctx.rotate(a)
.const img = document.querySelector("img");
const canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
canvas.toBlob((blob) => {
blob.arrayBuffer()
.then((buf) => {
// тут как-то отправить эту буффонаду через WebSocket
})
.catch(console.error)
;
}, "image/png");
var array = [
{
'key1': 'value1'
},
{
'key2': 'value2'
},
{'key1': 'value1-b'},
{'key1': 'value1-c'},
]
Массив объектов, в каждом из которых всего по 1 свойству. str
, и на выходе, видимо, массив значений. const getValues = (array, key) => array.filter((item) => item.hasOwnProperty(key))
.map((item) => item[key]);
getValues(array, "key1") // [ "value1", "value1-b", "value1-c" ]
const startDate = new Date(2021, 7, 8); // начало отсчёта
const today = new Date(); // сегодня
const daysPassed = Math.floor((today - startDate) / 864e5);
const future = new Date();
future.setDate(future.getDate() + 3 - daysPassed % 3);
document.querySelector('span.myDate')
.textContent = new Intl.DateTimeFormat(
'ru-RU',
{ month: 'long', day: 'numeric' }
)
.format(future);
:value="xxx"
selected
— точно так же0
потому, что первая буква имеет индекс 0
.s.length
– т.к. у последней буквы строки индекс s.length - 1
i++
или i = i + 1
— по одной позиции направо продвигаемся.