удалить меньшее количество номеров последовательности из объекта JavaScript - PullRequest
0 голосов
/ 11 марта 2019

У меня есть объект массивов, каждое значение в объекте является массивом из нескольких последовательностей чисел.

Я хочу удалить те последовательности, число которых меньше 10.

В данном входе 0-е значения имеют 3 последовательности, от 2 до 4 - не более 10 порядковых номеров, поэтому мы должны удалить их, а количество оставшихся 2 последовательностей - более 10.

Я добавил пробел в приведенном ниже входе только для справки, чтобы вы могли видеть разрыв последовательности в этом массиве, найти счет этой последовательности, если счет меньше 10, то удалите эту последовательность.

ВХОД:

{ '0': [ 2, 3, 4,    7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20,     22, 23, 24, 25,26,27,28,29,30,31,32 ],
   '3': [ 0, 1,2,3,4,5,6,7,8,9,10,11,12,13,    15,16,17,18,22,23,24 ] }

ВЫХОД:

{
'0': [7, 8, 9, 10, 11,12, 13, 14, 15, 16, 17, 18, 19, 20,     22, 23, 24, 25,26,27,28,29,30,31,32],
'3': [ 0,1,2,3,4,5,6,7,8,9,10,11,12,13]

Я не могу завершить логику

for (var key in emptyMap) {
    let count = [];
    let initialVal = emptyMap(key)[0];
    removeEmptyMap[key] = [];
    for (let i = 1; i < emptyMap(key).length; i++) {

        if ((emptyMap(key)[i] === initialVal + 1)) {

            count[key].push(emptyMap(key)[i])
        } else if (count.pop() < 10) {
            initialVal = emptyMap(key)[i];
        } else {
            initialVal = emptyMap(key)[i];
        }
    }
    console.log()

}

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Сначала вам нужно создать массив массивов, который будет содержать каждую последовательность. А затем вернуть комбинацию arrays, значение которой больше 10. Примените этот метод к каждому key вашего obj

let obj = { '0': [ 2, 3, 4,    7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20,     22, 23, 24, 25,26,27,28,29,30,31,32 ],
   '3':
   [ 0, 1,2,3,4,5,6,7,8,9,10,11,12,13,   15,16,17,18,22,23,24 ] }

function getSeq(arr,len){
  let seq = [[]];
  for(let i = 0;i<arr.length;i++){
    seq[seq.length -  1].push(arr[i]);
    if(arr[i] !== arr[i+1] - 1){
      seq.push([])
    } 
  }
  return seq.reduce((ac,a) => a.length < len ? ac: [...ac,...a],[])
}

for(let key in obj){
  obj[key] = getSeq(obj[key],10)
}
console.log(obj)
0 голосов
/ 11 марта 2019

Если я правильно понял, вы этого хотите.Это идеальное задание для splice.

var obj = 
{ '0': [ 2, 3, 4,7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25,26,27,28,29,30,31,32 ],
'3': [ 0, 1,2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,   15, 16, 17, 18, 22, 23, 24 ] }

console.log('input', obj)

var sum = 0
for (let i=0; i<obj['0'].length; i++){
  sum += obj['0'][i]
  if (sum > 10) {
    obj['0'].splice(0, i)
    break
  }
}

console.log('output', obj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...