const isArrOK = arr => arr.length && arr.every(n => n.value !== '-');const newArr = arr.reduce((acc, { arr: n }) => (
isArrOK(n) && acc.push(n),
acc
), []);
// или
const newArr = arr.map(n => n.arr).filter(isArrOK);
// или
const newArr = [];
for (const n of arr) {
if (isArrOK(n.arr)) {
newArr[newArr.length] = n.arr;
}
}
$('#file').on('change', ({ target: { files: [ file ] } }) => {
$('#info-file').html([ 'name', 'size', 'type' ]
.map(n => `<div>${n}: ${file[n]}</div>`)
.join('')
);
});
$("#box1:checked, #box2:checked").val()$('#logistic input:checked').get().reduce((acc, n) => acc + +n.value, 0)
function GetCookies(name) { <...> return null; } <...> faves.push(fav); <...> var myfaves = JSON.parse(GetCookies('favespages')); faves = myfaves;
faves = myfaves instanceof Array ? myfaves : [];.
const result = tags.filter(n => active.some(m => m.name === n.name));function intersection(data1, data2, key = n => n) {
const result = [];
const getKey = key instanceof Function ? key : n => n[key];
const keys = new Set(Array.from(data2, getKey));
for (const n of data1) {
if (keys.has(getKey(n))) {
result.push(n);
}
}
return result;
}// ваш случай
const result = intersection(tags, active, 'name');
// есть и другие варианты применения
intersection([ 69, 187, 666 ], [ 0, 1, 2, 3, 187 ]) // [187]
intersection(Array(10).keys(), Array(3).keys()) // [0, 1, 2]
intersection('aBCdE', 'bDfHj', n => n.toLowerCase()) // ['B', 'd']
$('.photo-link').val(function() {
return $(this).parent().find('.ulightbox').attr('href');
});document.querySelectorAll('.photo-link').forEach(n => {
n.value = n.parentNode.querySelector('.ulightbox').getAttribute('href');
});
$('#btn').click(function() {
i = (i + 1) % arrLatLng.length;
map.setCenter(arrLatLng[i]);
});
const containerSelector = '.info';
const buttonSelector = `${containerSelector} button`;
const props = [ 'quantity', 'square', 'floor' ];
const { elements } = document.querySelector('form');
document.addEventListener('click', ({ target: t }) => {
if (t.matches(buttonSelector)) {
props.forEach(function(n) {
elements[n].value = this.querySelector(`.${n}`).textContent;
}, t.closest(containerSelector));
}
});
const result = arr.flatMap((n, i) => i & 1 ? n : [...n].reverse());const result = [];
for (let i = 0; i < arr.length; ++i) {
const a = i & 1 ? arr[i] : [...arr[i]].reverse();
for (let j = 0; j < a.length; ++j) {
result.push(a[j]);
}
}мне как бы очень важна производительность, и reverse() это как бы дополнительная операция
const result = arr.reduce((acc, n, i) => (
i & 1
? acc.push(...n)
: n.reduceRight((_, m) => acc.push(m), null),
acc
), []);
// или
const result = [];
for (const [ i, n ] of arr.entries()) {
const [ start, end, step ] = [
[ n.length, -1, -1 ],
[ -1, n.length, 1 ],
][i & 1];
for (let j = start; (j += step) !== end;) {
result.push(n[j]);
}
}
id="link".this; а вместо того, чтобы выдумывать какие-то стрёмные id для блоков которые надо показать, поднимайтесь при клике до общего предка блока и кликнутого элемента, и ищите блок через querySelector:onclick="showTooltip(this)"function showTooltip(link) {
const div = link.parentNode.querySelector('div');
if (div.style.display === 'none') {
div.style.display = 'block';
link.style.display = 'none';
} else {
div.style.display = 'none';
}
}document.querySelectorAll('.contacts-number a').forEach(n => {
n.addEventListener('click', onClick);
});
function onClick() {
const div = this.closest('.contacts-number').querySelector('div');
if (div.style.display === 'none') {
div.style.display = 'block';
this.style.display = 'none';
} else {
div.style.display = 'none';
}
}
пока кроме ошибок ничего не получил
document.querySelectorAll('.test').forEach(n => {
n.textContent = n.textContent.replace(/\bAenean\b/g, 'Aenean1');
});
// или
for (const n of document.getElementsByClassName('test')) {
n.innerText = n.innerText.replace(/\bAenean\b/g, '$&1');
}
<div>
<button data-step="-1">-</button>
<button data-step="+1">+</button>
</div>
<textarea cols="30" rows="10"></textarea>const history = JSON.parse(localStorage.getItem('history')) || [];
let index = history.length - 1;
const $text = $('textarea').change(function() {
index = history.push($text.val()) - 1;
localStorage.setItem('history', JSON.stringify(history));
});
$('[data-step]').click(function() {
goTo(index + +this.dataset.step);
});
goTo(index);
function goTo(newIndex) {
if (0 <= newIndex && newIndex <= history.length - 1) {
index = newIndex;
$text.val(history[index]);
}
}
const result = people.filter(function(n) {
return this.has(n.id);
}, new Set(arr));const result = [];
for (const n of people) {
for (const m of arr) {
if (m === n.id) {
result.push(n);
break;
}
}
}const result = (function get(i, n = people[i]) {
return n
? [].concat(arr.includes(n.id) ? n : [], get(-~i))
: [];
})(0);
<ul>
<li><span>aaa</span></li>
<li>
<span>bbb</span>
<ul>
<li><span>bbb.1</span></li>
<li>
<span>bbb.2</span>
<ul>
<li><span>bbb.2.1</span></li>
<li><span>bbb.2.2</span></li>
</ul>
</li>
<li>
<span>bbb.3</span>
<ul>
<li>
<span>bbb.3.1</span>
<ul>
<li><span>bbb.3.1.1</span></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>document.querySelectorAll('li').forEach(n => {
const count = n.querySelectorAll(':scope > ul > li').length;
n.querySelector('span').append(` (${count})`);
});for (const n of document.getElementsByTagName('li')) {
const { length: count } = n.getElementsByTagName('li');
n.children[0].insertAdjacentText('beforeend', ' (' + count + ')');
}
undefined относится к falsy значениям, так что с помощью оператора || подставляйте пустой объект (или какое-нибудь другое значение - смотрите сами, как вам удобнее) там, где нужное значение может отсутствовать, например:(((lead._embedded.items[0].custom_fields.find(cf => cf.id == PRODUCT_FIELD_ID) || {}).values || {})[0] || {}).value || nulllead._embedded.items[0].custom_fields.find(cf => cf.id == PRODUCT_FIELD_ID)?.values[0].value ?? null