Я использую Javascript. У меня есть массив, в котором я хочу отфильтровать все значения массива, которые находятся между определенными значениями, содержащими определенную фразу. Вот пример массива:

   var array = [
      '[en]: The sun rises at 6:00',
      '[en]: Its time for brakefast',
      '[en]: comment_start',
      '[en]: Lorun ipsum a dummy text',
      '[en]: Mauris consequat massa ante',
      '[en]: In hac habitasse platea dictumst',
      '[en]: comment_end',
      '[en]: The sun sets at 6:30'
    ]

В соответствии с приведенным выше примером массива javascript, как я могу удалить все значения массива между значениями, которые содержат фразу « comment_start » и « comment_end »?

В настоящее время я не использую какие-либо сторонние библиотеки, чтобы Lodash обрабатывал массивы и объекты.

1
tam 25 Сен 2018 в 18:02

2 ответа

Лучший ответ

Мы можем попробовать что-то вроде этого: мы начнем фильтрацию, как только попадем в раздел комментариев, а затем остановимся, как только выйдем.

Вы также можете использовать array.reduce аналогичным образом.

  var array = [
	  '[en]: The sun rises at 6:00',
	  '[en]: Its time for brakefast',
	  '[en]: comment_start',
	  '[en]: Lorun ipsum a dummy text',
	  '[en]: Mauris consequat massa ante',
	  '[en]: In hac habitasse platea dictumst',
	  '[en]: comment_end',
	  '[en]: The sun sets at 6:30'
	];
  
  var inCommentSection = false;
  var result = array.filter(v => {
	if (!inCommentSection) {
		inCommentSection = v.includes("comment_start");
	} else {
		inCommentSection = !v.includes("comment_end");
		return false;
	}
	return !inCommentSection;
  });
  
  
 console.log("Result", result);
4
Terry Lennox 25 Сен 2018 в 15:13

Вот решение с использованием .indexOf () и .slice (). Измените в соответствии с комментарием, чтобы не использовать '[en] ...'

var array = [
      '[en]: The sun rises at 6:00',
      '[en]: Its time for brakefast',
      '[en]: comment_start',
      '[en]: Lorun ipsum a dummy text',
      '[en]: Mauris consequat massa ante',
      '[en]: In hac habitasse platea dictumst',
      '[en]: comment_end',
      '[en]: The sun sets at 6:30'
    ]
const start = array.indexOf(array.find(element => {
                return element.match('comment_start')
              })
            )
const end = array.indexOf(array.find(element => {
                return element.match('comment_end')
              })
            )
const middleComments = array.slice(start + 1, end)

return middleComments
0
adam.k 25 Сен 2018 в 15:55