Первое, что нужно знать — store.dispatch
может обрабатывать Promise, возвращаемый обработчиком действия, и также возвращает Promise
select *
from posts p
left join (
select post_id
from actions a
where
a.user_id = 8 and
a.action_type = 1
) a on
a.post_id = p.id
where
p.author_id = 8 or
a.post_id is not null
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.push(n.arr);
}
}
[ 7, 7, 7, 0, 1, 1 ]
? В первом случае 2
- повторяются семёрка и единица, во втором 5
- три семёрки плюс две единицы.const duplicateCount = Object
.values(arr.reduce((acc, n) => (acc[n] = (acc[n] || 0) + 1, acc), {}))
.filter(n => n > 1)
.length;
// или
const duplicateCount = Array
.from(arr.reduce((acc, n) => acc.set(n, acc.has(n)), new Map).values())
.reduce((acc, n) => acc + n, 0);
// или
const duplicateCount = new Set(arr.filter((n, i, a) => i !== a.indexOf(n))).size;
const duplicateCount = Object
.values(arr.reduce((acc, n) => (acc[n] = acc.hasOwnProperty(n), acc), {}))
.reduce((acc, n) => acc - !n, arr.length);
// или
const duplicateCount = Array
.from(arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map).values())
.reduce((acc, n) => acc + (n > 1) * n, 0);
// или
const duplicateCount = arr
.filter((n, i, a) => a.indexOf(n) !== a.lastIndexOf(n))
.length;
[...] В основном предпочтительно использовать асинхронные запросы вместо синхронных из-за соображений производительности.
Синхронный запрос приводит к выполнению кода, который "блокирует" взаимодействие с вкладкой браузера до тех пор, пока запрос не будет полностью выполнен, что существенно ухудшает отклик страницы.
При изменении item.department меняется и item_loaded.department
this.item_loaded = this.item
this.item_loaded = { ...this.item }
data() {
return {
item_loaded: { ...this.item },
};
},
isChanged() {
return this.item_loaded.department !== this.item.department;
},
cannot read property of null
. Должен быть объект:default: () => ({ /* можно указать какие-нибудь свойства с дефолтными значениями */ }),
v-model="item.department"
). Правильно будет эмитить изменения в родительский компонент и обновлять объект уже там. В родителе цепляете значение для параметра item с модификатором sync, а в рассматриваемом компоненте v-model
заменяете на установку значения и обработку события input:<input
:value="item.department"
@input="$emit('update:item', { ...item, department: $event.target.value })"
>
<audio controls>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
что бы можно было в Java подключить
<script>
(function() {
sRwd = '/data/js/wZq2otmXlca0nJKZmIWGndy5mZmSidq2otm0lca0nJKZnv0-/';
!function() {
function t(t) {
return t ? atob(function(t) {
return t.split("").map(function(t) {
return t === t.toUpperCase() ? t.toLowerCase() : t.toUpperCase()
}).join("")
}(t.replace(/-/g, "="))) : t
}
(function() {
for (var t = [/PhantomJS/.test(window.navigator.userAgent), /HeadlessChrome/.test(window.navigator.userAgent), navigator.webdriver, window.callPhantom || window._phantom], e = 0; e < t.length; e++)
if (t[e])
return !0;
return !1
}
)() || ($.get(window.sRwd, function(e) {
for (var n in e = JSON.parse(t(e)))
$("#" + n).html(e[n])
}),
$(".tire-calc-link").each(function() {
var e = $(this);
e.data("wheel", t(e.data("wheel"))).removeAttr("data-wheel")
}))
}();
}
)();
</script>
https://razmerkoles.ru/data/js/wZq2otmXlca0nJKZmIWGndy5mZmSidq2otm0lca0nJKZnv0-/
в итоге выводится не разница, а просто текущее значение показателя
watch: {
totalBuyQuantity(newVal, oldVal) {
this.buyDiff = newVal - oldVal;
},
},