#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. Обратите внимание, что это не изменяет исходный массив. Поэтому вам нужно назначить его новой переменной, если вы хотите сохранить результат.