function replaceSubstring(string, words, substring) {
// Получаем слова между которыми искать замену
const [word1, word2] = words.split(' ')
// Находим индексы этих слов
const [pos1, pos2] = [string.indexOf(word1), string.indexOf(word2)]
if (pos1 < 0 || pos1 + word1.length >= pos2) return string
// Добавляем пробелы в строку замены, если отсутствуют
if (!substring.startsWith(' ')) substring = ' ' + substring
if (!substring.endsWith(' ')) substring += ' '
// Возвращаем новую стрроку с итерационным вызовом, так как могут быть и другие вхождения
return string.substring(0, pos1 + word1.length) +
substring +
word2 +
replaceSubstring(string.substring(pos2 + word2.length), words, substring)
}
function replaceSubstring2(string, words, substring) {
if (!substring.startsWith(' ')) substring = ' ' + substring
if (!substring.endsWith(' ')) substring += ' '
const regex = words.replace(' ', '.+?')
return string.replaceAll(new RegExp(regex, 'g'), words.replace(' ', substring))
}
[
['alex', '111111'],
['alex', 2222222],
...
]
[
'111111' => ['alex', 'john'],
'222222' => ['alex']
...
]
$data = [
'alex' => [
"1111111",
"2222222",
"1726354"
],
'john' => [
"1111111",
"3333333",
"7162534"
],
'michel' => [
"1111111",
"453453453",
"3333333"
]
] ;
$res = [];
foreach ($data as $name => $phones) {
foreach($phones as $phone) {
if (!array_key_exists($phone, $res)) {
$res[$phone] = [];
}
$res[$phone][] = $name;
}
}
print_r($res)
Array
(
[1111111] => Array
(
[0] => alex
[1] => john
[2] => michel
)
[2222222] => Array
(
[0] => alex
)
[1726354] => Array
(
[0] => alex
)
[3333333] => Array
(
[0] => john
[1] => michel
)
[7162534] => Array
(
[0] => john
)
[453453453] => Array
(
[0] => michel
)
)
Соединение = Новый HTTPСоединение("djangobasepath.com", 80 );
Ответ = Соединение.Получить(Новый HTTPЗапрос("/v8exchange/get"));
Данные = Ответ.ПолучитьТелоКакСтроку());
$arr = [0 => 'a', 1 => 'b', 2 => 'c'];
$res = [];
for ($i = 1; $i < pow(2, count($arr)); $i++ ) {
$bin = decbin($i);
$case = "";
foreach(str_split(strrev($bin)) as $ind => $symb) if ($symb == "1") $case .= $arr[$ind];
$res[] = $case;
}
echo implode(", ", $res); // a, b, ab, c, ac, bc, abc
function nextSmaller(n){
const rev = [...`${n}`].map(Number).reverse()
const idx1 = rev.findIndex((v, i, a) => i && a[i-1] < v)
if (idx1 < 0) return idx1
const idx2 = rev.slice(0, idx1).findIndex(v => v < rev[idx1])
if (idx2 < 0) return idx2;
[rev[idx1], rev[idx2]] = [rev[idx2], rev[idx1]]
const nn = +rev.slice(idx1).reverse().concat(rev.slice(0, idx1)).join('')
return nn
}
console.log(nextSmaller(133232766512347)) //133232766475321
"ВЫБРАТЬ
Номенклатура,
СУММА(Количество)
ИЗ (
ВЫБРАТЬ Номенклатура, Количество
ИЗ Документ.РТиУ.Номенклатура ГДЕ Ссылка = &РТиУ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Номенклатура, - Количество
ИЗ Документ.СФ.Номенклатура ГДЕ Ссылка = &СФ
)
СГРУППИРОВАТЬ ПО Номенклатура
ИМЕЮЩИЕ СУММА(Количество) <> 0"
function getSortBy(arr, rules = ['10', '110', 220]) {
const groupedMap = arr.reduce((agg, v) => {
if (!agg[v.groupId]) agg[v.groupId] = []
agg[v.groupId].push(v)
return agg
}, {})
const groups = Object
.values(groupedMap)
.map(arr => arr.sort((a, b) => b.source - a.source))
const indexedGroups =
groups
.map(arr => ({
arr,
sortIndex: (rules.indexOf(arr.map(v => v.source).join('')) + 1) || 1000
}))
const sortedGroups =
indexedGroups.sort((a, b) => a.sortIndex - b.sortIndex)
const firstGroup = sortedGroups[0].arr
const element = firstGroup.find(v => v.source === 0)
return element
}
const arr = [
{id: 1, groupId: 100, source: 1},
{id: 2, groupId: 100, source: 2},
{id: 3, groupId: 100, source: 1},
{id: 4, groupId: 200, source: 1},
{id: 5, groupId: 200, source: 0},
{id: 6, groupId: 300, source: 1},
{id: 7, groupId: 300, source: 0},
{id: 8, groupId: 300, source: 1},
{id: 9, groupId: 400, source: 1},
{id: 10, groupId: 400, source: 0},
{id: 11, groupId: 400, source: 0},
{id: 12, groupId: 500, source: 2},
{id: 13, groupId: 500, source: 1},
];
console.log(getSortBy(arr)) // { groupId: 200, id: 5, source: 0 }
const arr2 = [
{id: 1, groupId: 100, source: 1},
{id: 2, groupId: 100, source: 2},
{id: 3, groupId: 100, source: 1},
{id: 4, groupId: 200, source: 1},
{id: 5, groupId: 200, source: 2},
{id: 6, groupId: 300, source: 1},
{id: 7, groupId: 300, source: 0},
{id: 8, groupId: 300, source: 1},
{id: 9, groupId: 400, source: 1},
{id: 10, groupId: 400, source: 2},
{id: 11, groupId: 400, source: 2},
{id: 12, groupId: 500, source: 2},
{id: 13, groupId: 500, source: 1},
];
console.log(getSortBy(arr2)) // { groupId: 300, id: 7, source: 0 }
let customKeys
const items = Array.from(['custom', 'default']).flatMap(group => {
const scope = group + "Data"
// Собираем элементы группы
const items = (data[group] || []).flatMap(({ id, links }) =>
links.map(link => ({...link, id, scope }))
)
const getKey = v => JSON.stringify([v.id, v.number])
if (!customKeys) {
// индексируем ключи кастомных элементов
customKeys = items.reduce((agg, v) =>
Object.assign(agg, {[getKey(v)]: v})
, {})
return items
} else {
// Для ключей, найденных ранее, устанавливаем родителя и отфильтровываем
const defaultIds = []
const defaultItems = items.filter(v => {
const child = customKeys[getKey(v)]
if (child) {
child.parent = v
defaultIds.push(v.id)
} else {
return true
}
})
// Оставляем в data.default лишь элементы с id, не найденные в custom
if (defaultIds.length) {
const idsSet = new Set(defaultIds)
const copy = [...data.default]
data.default.length = 0
data.default.push(...copy.filter(v => !idsSet.has(v.id)))
}
return defaultItems
}
})
console.log(data) // Дата без кастомных ключей в дефолт скоуп
console.log(items) // Результат
const data = [
"Пн 02:15 - Пн 07:40",
"Пн 04:20 - Пн 06:00",
"Пн 06:30 - Пн 09:15",
"Пн 09:50 - Пн 15:00",
"Пн 17:00 - Вт 23:20"];
const weekDays = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
const periods = data
.map(v =>
v
.split(" - ")
.map(v =>
String(weekDays.indexOf(v.substring(0, 2))) +
v.substring(2)
)
)
.sort((a, b) => {
if (a[0] < b[0]) return -1
if (a[0] > b[0]) return 1
return 0
})
.concat([["6 23:59", ""]])
const freePeriods = periods.reduce((agg, period) => {
if (period[0] > agg.lastOccupied) agg.freePeriods.push([agg.lastOccupied, period[0]])
if (agg.lastOccupied < period[1]) agg.lastOccupied = period[1]
return agg
}, { freePeriods: [], lastOccupied: "0 00:00"} )
.freePeriods
.map(v =>
v.map(v => weekDays[v[0]] + v.substring(1)).join(" - ")
)
console.log(freePeriods) // ["Пн 00:00 - Пн 02:15", "Пн 09:15 - Пн 09:50", "Пн 15:00 - Пн 17:00", "Вт 23:20 - Вс 23:59"]
const promise = axios.get('https://jsonplaceholder.typicode.com/todos/1')
promise
.then(response => ({ response, items: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }))
.then(nextThen)
.catch(console.log)
const nextThen = ({ response, items }) => {
if (!items.length) {
console.log(response)
return
}
const [nextValue, ...rest] = items
promise
.then(item => axios.get(`https://jsonplaceholder.typicode.com/users/${item}`))
.then(res => {
fs.writeFileSync('test.json', JSON.stringify(res.data.phone, null, 2))
return ( { response, items: rest })
})
.then(nextThen)
return nextValue
}