function filterByMinMax(arr, [ min, max ], key = n => n) {
const getVal = key instanceof Function ? key : n => n[key];
return arr.filter(n => {
const val = getVal(n);
return (min == null || min <= val) && (max == null || val <= max);
});
}
const d1 = filterByMinMax(chartPoints, [ new Date('2019-02-19') ], n => new Date(n.date));
const d2 = filterByMinMax(chartPoints, [ , '2019-01-23' ], n => n.date);
const d3 = filterByMinMax(chartPoints, [ '2019-02-12', '2019-02-26' ], 'date');
var arr1 = [1, 2, 3, 4, 5, 6, 7];
var arr2 = [1, 2, 3, 5, 6, 7];
function analyzeArrays() {
arr1=arr1.sort().filter(e=>e===0||e);
arr2=arr2.sort().filter(e=>e===0||e);
if (Math.abs(arr1.length-arr2.length) != 1) return console.log('Пропущено не одно число!');
for(let i=0; i<arr1.length; i++) {
if (arr1[i] == arr2[i]) continue;
if (arr1[i] == arr2[i+1]) return console.log('Число '+arr2[i]+' пропущено в arr1');
if (arr1[i+1] == arr2[i]) return console.log('Число '+arr1[i]+' пропущено в arr2');
return console.log('Фигня какая-то');
}
console.log('Число '+arr2[arr2.length-1]+' пропущено в arr1');
}
analyzeArrays();
Object.assign(users.find(n => n.id === id), user);
const u = users.find(n => n.id === id);
if (u) {
Object.assign(u, user);
} else {
// добавляем, например
users.push({ ...user, id });
}
const users = [
{
id: '1',
firstName: 'Марк',
lastName: 'Визельман',
email: 'mark@gmail.com'
},
{
id: '2',
firstName: 'Кирилл',
lastName: 'Давсон',
email: 'kirill@gmail.com'
},
{
id: '3',
firstName: 'Виктор',
lastName: 'Ганеш',
email: 'victor@gmail.com'
}
]
const usersList = users.map(item=>item.firstName+" "+item.lastName+" "+item.email);
const usersList = users.map(n => `${n.firstName} ${n.lastName} ${n.email}`);
const usersList = users.map(function(n) {
return this.map(k => n[k]).join(' ');
}, [ 'firstName', 'lastName', 'email' ]);
const count = matrix.flat().reduce((acc, n) => (acc[n] = -~acc[n], acc), {});
const count = {};
for (const row of matrix) {
for (const n of row) {
if (!count.hasOwnProperty(n)) {
count[n] = 0;
}
count[n]++;
}
}
background: url(img1.svg) repeat-x;
. Остается только задать бесконечную анимацию смещения фона в нужную сторону на @keyframes
. Все.nextHandler = () => {
const items = [...this.state.items];
items.push(items.shift());
this.setState({ items });
}
prevHandler = () => {
const items = [...this.state.items];
items.unshift(items.pop());
this.setState({ items });
}
<button onClick={this.nextHandler} data-step={-1}>prev</button>
<button onClick={this.nextHandler} data-step={+1}>next</button>
nextHandler = (e) => {
const step = +e.target.dataset.step;
this.setState(({ items }) => ({
items: [ ...items.slice(step), ...items.slice(0, step) ],
}));
}
document.querySelector('input').addEventListener('input', e => {
const
val = e.target.value,
reg = RegExp(val, 'gi'),
keys = [ 'firstName', 'lastName' ];
document.querySelector('.autocomplete-suggestions__list').innerHTML = val && people
.map(n => keys.map(k => n[k]).join(' '))
.filter(n => (reg.lastIndex = 0, reg.test(n)))
.map(n => `<div>${n.replace(reg, '<strong>$&</strong>')}</div>`)
.join('');
});
pos: true
должны идти в начале. Просто отсортируйте массив по этому признаку:arr.people.sort((a, b) => b.pos - a.pos)
arr
– вводит в заблуждение, можно подумать, что arr это массив. class App extends React.Component {
state = {
items: Array.from({ length: 10 }, (n, i) => ({
id: i + 1,
value: String.fromCharCode(97 + i).repeat(5),
})),
active: [],
}
toggleActive = e => {
const id = +e.target.dataset.id;
this.setState(({ active }) => ({
active: active.includes(id)
? active.filter(n => n !== id)
: [ ...active, id ],
}));
}
render() {
const { items, active } = this.state;
return (
<ul>
{items.map(n => (
<li
key={n.id}
data-id={n.id}
onClick={this.toggleActive}
className={active.includes(n.id) ? 'active' : ''}
>
{n.value}
</li>
))}
</ul>
);
}
}
const classes = {
0: 'first',
[props.data.length - 1]: 'last',
};
className={classes[i]}
.