Исключите только средние идентификаторы флагов в строке

#javascript

Вопрос:

У меня есть 2 массива

 IDList ["01","02","03","04"]  

Который содержит какие-то идентификаторы чего-то.

И у меня есть еще один список идентификаторов, который указывает, какой элемент списка идентификаторов обладает примером флага

 IDLISTPRD["01","02","03","04"]  

Как вы видите здесь, все элементы idList обладают флагом в соответствии с IDLISTPRD

Я хочу проверить, есть ли у какого-либо из этих идентификаторов 3 флага подряд.

Я создал этот код

 let eqObj = {};  for (var i = 0; i lt; IDLISTPRD.length; i  ) {  if (IDList.includes(IDLISTPRD[i])) {  eqObj[IDLISTPRD[i]] = IDList.indexOf(IDLISTPRD[i]);  }  }  

Сначала я нажимаю элементы(идентификаторы), которые одинаковы (обладают флагом).

В соответствии с 2 массивами это вернет eqObj [ ["01" : 0,"02" : 1,"03" : 2,"04" : 3]]

Чтобы сравнить их, мне придется их отсортировать

 let objSorted = Object.entries(eqObj ).sort(function (a, b) {  return b[1] - a[1];  });   let flagInRow= 0;  let flagInRowIndicator= true;   for (var i = 0; i lt; objSorted .length - 1; i  ) {  if (objSorted [i][1] - objSorted [i   1][1] == 1) {  flagInRow  ;  } else {  flagInRow= 0;  }   if (flagInRowlt; 2) {  flagInRowIndicator= true;  } else {  flagInRowIndicator= false;  break;  }  }  

Как вы можете видеть здесь, индикатор flaginRowIndicator становится истинным, когда он находит 3 флага подряд . Теперь я пытаюсь сохранить логику, но удалить средний элемент массива , например , если у меня есть массив с

 ["1","2","3"]   

там, где у трех из них есть флаги, я хочу удалить средний и вернуть массив только с ["1,"3"]

Другой пример, если бы в нем было 6 флагов подряд ["1","2","3","4","5","6"] , я хочу удалить только средние из 3 строк, как в этом случае, чтобы удалить 2 и 5 и вернуть

 ["1","3","4","6"]  

Комментарии:

1. и что же идет не так?

2. Я хочу соединить только средние элементы, как сказано

3. у вас всегда есть длина, кратная трем?

4. Да, это может выглядеть как массив с длиной 3 6 9

Ответ №1:

Вы можете выполнить итерацию с конца и соединить массив.

 function removeMiddle(array) {  let i = array.length - 2;  while (i gt; 0) {  array.splice(i, 1);  i -= 3;  }  return array; }  console.log(removeMiddle([1, 2, 3])); console.log(removeMiddle([1, 2, 3, 4, 5, 6])); 

Комментарии:

1. Спасибо, макан,вы объясните, почему его массив, длина — 2

2. потому что это индекс самого большого нежелательного элемента. шаблон-это x_x , или x_xx_x , или x_xx_xx_xx_x , где _ находится нежелательное значение.

Ответ №2:

попробуйте использовать метод фильтра:

 arr.filter((_, index) =gt; (index%3 !==1))  

Комментарии:

1. Обратите внимание, что это не изменяет исходный массив. Поэтому вам нужно назначить его новой переменной, если вы хотите сохранить результат.