arr.map((n, i) => n ? i : null).filter(n => n !== null)
// или
arr.map((n, i) => n ? i : NaN).filter(n => n === n)
// или
arr.map((n, i) => !!n && i).filter(Number.isInteger)
// или
arr.map((n, i) => !n || i).filter(n => n !== !0)
arr.reduce((acc, n, i) => n ? [ ...acc, i ] : acc, [])
// или
arr.reduce((acc, n, i) => (n && acc.push(i), acc), [])
for (let i = arr.length; i--;) {
if (arr[i]) {
arr[i] = i;
} else {
arr.splice(i, 1);
}
}
// или
arr.reduceRight((_, n, i, a) => n ? a[i] = i : a.splice(i, 1), 0);
// или
arr.splice(0, arr.length, ...любое_выражение_с_map/filter_или_reduce_из_показанных_выше);
// или
let count0 = 0;
for (const [ i, n ] of arr.entries()) {
arr[i - count0] = i;
count0 += !n;
}
arr.length -= count0;
function textToDate(txt) {
if (txt == 'week') {
var startOfWeek = moment().startOf('week').format('DD.MM.YYYY');
var endOfWeek = moment().endOf('week').format('DD.MM.YYYY');
return startOfWeek + ' - ' + endOfWeek;
}
else if (txt == 'day') {
var startOfWeek = moment().startOf('day').format('DD.MM.YYYY');
return startOfWeek;
}
else if (txt == 'lastday') {
var startOfWeek = moment().subtract(1, 'day').startOf('day').format('DD.MM.YYYY');
return startOfWeek;
}
else if (txt == 'hour') {
var startOfWeek = moment().startOf('hour').format('DD.MM.YYYY HH:00');
var endOfWeek = moment().startOf('hour').add(1, 'hour').format('HH:00');
return startOfWeek + ' - ' + endOfWeek;
}
else if (txt == 'lastweek') {
var startOfWeek = moment().subtract(1, 'week').startOf('week').format('DD.MM.YYYY');
var endOfWeek = moment().subtract(1, 'week').endOf('week').format('DD.MM.YYYY');
return startOfWeek + ' - ' + endOfWeek;
}
else if (txt == 'month') {
var startOfWeek = moment().startOf('month').format('DD.MM.YYYY');
var endOfWeek = moment().endOf('month').format('DD.MM.YYYY');
return startOfWeek + ' - ' + endOfWeek;
}
else if (txt == 'lastmonth') {
var startOfWeek = moment().subtract(1, 'month').startOf('month').format('DD.MM.YYYY');
var endOfWeek = moment().subtract(1, 'month').endOf('month').format('DD.MM.YYYY');
return startOfWeek + ' - ' + endOfWeek;
}
else
return txt;
}
const categories = [
{ id: 1, name: 'name 1', parent: null },
{ id: 2, name: 'name 2', parent: 1 },
{ id: 3, name: 'name 3', parent: 6 },
{ id: 4, name: 'name 4', parent: 5 },
{ id: 5, name: 'name 5', parent: 6 },
{ id: 6, name: 'name 6', parent: null },
{ id: 7, name: 'name 7', parent: null }
]
function buildTree (array) {
// Складываем все элементы будущего дерева в мап под id-ключами
// Так легче делать поиск родительской ноды
const map = new Map(categories.map(item => [item.id, item]));
// Обход в цикле по значениям, хранящимся в мапе
for (let item of map.values()) {
// Проверка, является ли нода дочерней (при parent === null вернет undefined)
if (!map.has(item.parent)) {
continue;
}
// Сохраняем прямую ссылку на родительскую ноду, чтобы дважды не доставать из мапа
const parent = map.get(item.parent);
// Добавляем поточную ноду в список дочерних нод родительчкого узла.
// Здесь сокращено записана проверка на то, есть ли у ноды свойство children.
parent.children = [...parent.children || [], item];
}
// Возвращаем верхний уровень дерева. Все дочерние узлы уже есть в нужных родительских нодах
return [...map.values()].filter(item => !item.parent);
}
const tree = buildTree(categories);
console.log(tree);
const categories = [
{ id: 1, name: 'name 1', parent: null },
{ id: 2, name: 'name 2', parent: 1 },
{ id: 3, name: 'name 3', parent: 6 },
{ id: 4, name: 'name 4', parent: 5 },
{ id: 5, name: 'name 5', parent: 6 },
{ id: 6, name: 'name 6', parent: null },
{ id: 7, name: 'name 7', parent: null }
];
function buildTree(items, parent) {
parent = parent || null;
let result = [];
items.forEach((item) => {
if (item.parent === parent) {
result.push(item);
item.children = buildTree(items, item.id);
if (!item.children.length) {
delete item.children;
}
}
});
return result;
}
// todo: не обходить уже добавленные
console.log(buildTree(categories));
$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE);
$name = $input['name'];
$email = $input['email'];
$message = "Name: ".$name."\nEmail: ".$email;