const imgs = document.querySelectorAll('img[src*="/test/"]');
это не в dom, а в строке
const div = document.createElement('div');
div.innerHTML = str;
const imgsStr = ''.concat(...[].map.call(
div.querySelectorAll('img[src*="/test/"]'),
n => n.outerHTML
));
const imgsStr = Array
.from(
new DOMParser().parseFromString(str, 'text/html').querySelectorAll('img[src*="/test/"]'),
n => n.outerHTML)
.join('');
const imgsStr = Array.prototype.reduce.call(
document.createRange().createContextualFragment(str).querySelectorAll('img[src*="/test/"]'),
(acc, n) => acc + n.outerHTML,
''
);
мне нужно удалить из этой строки все картинки, которые...
const div = document.createElement('div');
div.innerHTML = str;
const imgs = div.querySelectorAll('img[src*="/test/"]');
for (let i = 0; i < imgs.length; i++) {
imgs[i].outerHTML = '';
}
str = div.innerHTML;
const { body } = new DOMParser().parseFromString(str, 'text/html');
body.querySelectorAll('img[src*="/test/"]').forEach(n => n.remove());
str = body.innerHTML;
const fragment = document.createRange().createContextualFragment(str);
for (const n of fragment.querySelectorAll('img[src*="/test/"]')) {
n.parentNode.removeChild(n);
}
str = Array.from(fragment.childNodes, n => n.outerHTML || n.nodeValue).join('');
...но если кладу этот файл в отдельную папку и рядом с файлом создаю файл package.json с таким содержанием...
module.exports = {
entry: './path/to/my/entry/file.js'
};
кроме того, что где одна функция возвращает true, там другая возвращает false
const res = Boolean(Number(myNumber));
isFinite('123'); // true
isFinite('123sss'); // false
переписать это, чтобы было более правильно
!!+myNumber
"0"
теряете (а ещё строковые представления двоичных/восьмеричных/шестнадцатеричных чисел - "0b101"
/"0o777"
/"0xFF"
, например, признаются корректными значениями)?/^\d+$/.test(str)
- только цифры (т.е., целые неотрицательные числа)/^-?\d+$/.test(str)
- ниже нуля теперь окей/^-?\d+(\.\d+)?$/.test(str)
- и дроби тоже const parentSelector = 'div';
const childSelector = 'p';
const className = 'there';
const siblingsSelector = `${parentSelector} > ${childSelector}`;
const elementSelector = `${siblingsSelector}.${className}`;
const index = Array.prototype.findIndex.call(
document.querySelectorAll(siblingsSelector),
n => n.classList.contains(className)
);
let index = -1;
for (
let el = document.querySelector(elementSelector);
el;
index++, el = el.previousElementSibling
) ;
const el = document.querySelector(elementSelector);
const index = el ? [...el.parentNode.children].indexOf(el) : -1;
childSelector
, и они не должны учитываться, то третий вариант не подходит, а во втором надо заменить index++
на index += el.matches(childSelector)
. const selector = 'div p';
const removeFromStart = 5;
const removeFromEnd = 3;
document.querySelectorAll(selector).forEach((n, i, a) => {
if (i < removeFromStart || i > a.length - removeFromEnd - 1) {
n.remove();
}
});
document.querySelectorAll([
`${selector}:nth-child(-n+${removeFromStart})`,
`${selector}:nth-last-child(-n+${removeFromEnd})`,
]).forEach(n => n.outerHTML = '');
как теперь передать данные в эти компоненты из него?
<Route exact path='/component' render={() => <myComponent prop={value}/>} />
как сделать так, чтобы при загрузке заходило сразу на страницу '/component', а не на '/'?
<Redirect exact from='/' to='/component'/>
const f = (a, sum) => a.reduce((r, x, i) => r.concat(a.slice(i+1).filter(y => x + y == sum).map(y => [x, y])), [])
Но для больших объёмов данных это вряд ли будет эффективно, скорее всего, самое обычное решение с двумя вложенными циклами будет работать шустрее и менее затратно по памяти, чем в цикле гонять массив через slice/filter/map. В лоб это как-то так:const f = (a, sum) => {
const l = a.length;
let r = [];
for (let i = 0; i < l-1; i++)
for (let j = i+1; j < l; j++)
if (a[i] + a[j] == sum)
r.push([a[i], a[j]]);
return r;
}
const getPairsWithSumFromArr = (arr, sum) => {
let map = {},
res = [];
for (let i=0; i < arr.length; i++) {
const currEl = arr[i];
if (map[currEl] !== undefined) {
res.push([map[currEl], currEl]);
} else {
map[sum - currEl] = currEl;
}
}
return res;
}
this
из всех методов, которые могут быть не последними в цепочке вызовов:function calc(val) {
const self = Object.create(calc.prototype);
self.val = val;
return self;
}
calc.prototype = {
plus(val) {
this.val += val;
return this;
},
minus(val) {
this.val -= val;
return this;
},
valueOf() {
return this.val;
},
};
+calc(0).plus(1); // 1
+calc(1).plus(1).plus(1); // 3
+calc(1).plus(2).plus(3).plus(4).minus(5); // 5
calc(3).plus(7).minus(2) * 3; // 24
99 + calc(1); // 100