computed: {
grouped() {
return this.arr.reduce((acc, n) => ((acc[n.group] ??= []).push(n), acc), {});
},
},
<v-expansion-panels>
<v-expansion-panel v-for="(items, groupName) in grouped">
<v-expansion-panel-header>{{ groupName }}</v-expansion-panel-header>
<v-expansion-panel-content>
<div v-for="n in items">{{ n.name }}</div>
</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
class MyClass {
method1 () { alert(1) }
method2 () { alert(2) }
}
const obj = new MyClass
obj.method3 = () => { alert(3) }
console.log(obj.hasOwnProperty('method2'))
// false, потому что это свойство родителя, не собственное
console.log(obj.hasOwnProperty('method3'))
// true, потому что это свойство не унаследовано а добавлено непосредственно к объекту
console.log(Boolean(obj.__proto__.method2))
// true, проверяется в наследованном от непосредственного родителя прототипе
console.log(Boolean(obj.method2))
// true, проверяется во всей цепочке прототипов, при длинной цепочке наследования может быть неоправданно затратной операцией
arr.pop();
// или
arr.length -= !!arr.length;
// или
arr.splice(-1);
const count = сколько надо удалить;
):for (let i = count; --i >= 0 && arr.length; arr.pop()) ;
// или
arr.length -= Math.max(0, Math.min(arr.length, count));
// или
count > 0 && arr.splice(-count);
const res = undefined || 'nodata';
const res = undefined ?? 'nodata'; // для тайпскрипта и свежого жс
title
, с особым случаем: «Другое» – в конец:arr.sort((a, b) => {
const keyword = 'Другое';
if (a.title === b.title) return 0;
if (a.title === keyword) return 1;
if (b.title === keyword) return -1;
return a.title > b.title ? 1 : -1;
})
const arr = [
{id: 1, title: "Другое"},
{id: 2, title: 'Товары'},
{id: 2, title: 'Услуги'},
{id: 3, title: 'Услуги'},
{id: 4, title: 'Товары'},
{id: 5, title: 'Анекдоты'},
{id: 6, title: 'Тамада, тосты, сверлю бетон'},
];
// [
// { id: 5, title: "Анекдоты" }
// { id: 6, title: "Тамада, тосты, сверлю бетон" }
// { id: 2, title: "Товары" }
// { id: 4, title: "Товары" }
// { id: 2, title: "Услуги" }
// { id: 3, title: "Услуги" }
// { id: 1, title: "Другое" }
// ]
const insert = (str, index, ch) =>
str.replace(RegExp(`(?<=.{${index}})`), ch);
// или
const insert = (str, index, ch) =>
str.replace(RegExp(`.{${index}}`), `$&${ch}`);
// или
const insert = (str, index, ch) =>
str.length >= index ? str.slice(0, index) + ch + str.slice(index) : str;
Чтобы убрать этот долбозапрос
«Преждевременная оптимизация — корень всех зол». Дональд Кнут.
let number = -2e9;
let timer = setInterval(
() => {
console.log(number);
number += 1;
if (number > 2e9) {
clearInterval(timer);
}
},
1
);