db.users.remove({'_id':{'$in':inactive_users}})
Это поможет, используя только встроенный JavaScript, который должен работать в любой последней версии Node.JS:
const str = "6:00AM - Get up, Make the bed, Brush my teeth. 6:45AM - Take a shower. 7:15AM - Have breakfast, Leave for school."
sentences = {};
// split the string on periods, and trim each sentence
for (sentence of str.split('.').map(x => x.trim())) {
// you end up with a completely empty sentence when the last
// sentence ends in a period, which is uninteresting
if (sentence) {
// split each sentence on a hyphen, and assume the first
// element is time and the second is actions
let [time, actions] = sentence.split(' - ');
// split the actions string on commas and trim whitespace;
// store that in our sentences object
sentences[time] = actions.split(',').map(x => x.trim());
}
}
Тогда console.log(sentences)
в конце даст вам:
Может быть, это довольно наивное решение, но вы можете решить что-то подобное с помощью комбинации split
и map
.
Допустим, у вас есть строка. Вы можете начать разбивать его по первому наибольшему разделителю (точка в этом примере).
const string = "6:00AM - Get up, Make the bed, Brush my teeth. 6:45AM - Take a shower. 7:15AM - Have breakfast, Leave for school."
const firstSplit = string.split(".");
То, что у вас сейчас есть в firstSplit
, будет что-то вроде ["6:00AM - Get up, Make the bed, Brush my teeth", "6:45AM - Take a shower", "7:15AM - Have breakfast, Leave for school"]
. Теперь вы можете разделить каждое из значений в этом массиве на час и активности.
Так как я хочу разделить каждый элемент в массиве (получив новый массив с результатами), я буду использовать map
const secondSplit = firstSplit.map(each => each.split(" - "))
Теперь secondSplit
будет выглядеть примерно как [["6:00AM", "Get up, Make the bed, Brush my teeth"], ["6:45AM", "Take a shower"], ["7:15AM", "Have breakfast, Leave for school"]]
[ 1119]
Теперь давайте преобразуем этот странный массив массивов в объект, в котором первая позиция каждого небольшого массива является ключом, а вторая - значением. Я буду использовать vainilla javascript, но, конечно, это будет проще с любой библиотекой js (например, lodash или ramda)
const almostThere = secondSplit.reduce((object, subarray) => {
object[subarray[0]] = subarray[1]
return object
}, {})
Это невероятно близко к тому, что вы на самом деле хотите. Объект выглядит примерно так:
{
6:00AM: "Get up, Make the bed, Brush my teeth",
6:45AM: "Take a shower",
7:15AM: "Have breakfast, Leave for school"
}
Обратите внимание, что нам не хватает еще одного разбиения на каждое из значений объекта. Мы можем справиться с этим, изменив reduce
, сделанное ранее
const yeay = secondSplit.reduce((object, subarray) => {
object[subarray[0]] = subarray[1].split(", ")
}, {})
И все!
В целом это может выглядеть примерно так:
const firstSplit = string.split(".")
.map(each => each.split(" - "))
.reduce((object, subarray) => {
object[subarray[0]] = subarray[1].split(", ")
return object
}, {})
может быть оптимизирован примерно так:
const yeay = string.split(".")
.reduce((object, hourAndChores) => {
const splittedHourAndChores = hourAndChores.split(" - ");
object[splittedHourAndChores[0]] = splittedHourAndChores[1].split(", ")
return object
}, {})