l oop с динамикой c начальная точка с условием в javascript - PullRequest
1 голос
/ 10 июля 2020

Привет, я пытаюсь создать этот logi c, который будет l oop и регистрировать базу индекса пользовательской начальной точки при условии, если текущий индекс не равен 0, начальный счет будет увеличиваться

Образец массива data

   const data = [ 
     { type:'yes',start:1 }, //count index starting point
     { type:'yes',start:1 },
     { type:'no',start:0 }, //skip
     { type:'no',start:0 }, //skip
     { type:'yes',start:5 }, //new index starting point
     { type:'yes',start:5 },
     { type:'no',start:0 },  //skip
     { type:'yes',start:5 }, //new index starting point
     { type:'yes',start:5 },
     { type:'no',start:0 },  //skip
     { type:'yes',start:10 },//new index starting point
     { type:'yes',start:10 },
     { type:'yes',start:10 }, 
    ]

если я запустил l oop вот так

for(var i = 0; i < data.length ; i++){
    // code here
    console.log( **newindex** )
}

ожидалось newindex

1,2,0,0,5,6,0,5,6,0,10,11,12

Спасибо вы можете мне помочь

Ответы [ 4 ]

1 голос
/ 10 июля 2020

const data = [ 
   { type:'yes',start:1 }, //count index starting point
   { type:'yes',start:1 },
   { type:'no',start:0 }, //skip
   { type:'no',start:0 }, //skip
   { type:'yes',start:5 }, //new index starting point
   { type:'yes',start:5 },
   { type:'no',start:0 },  //skip
   { type:'yes',start:5 }, //new index starting point
   { type:'yes',start:5 },
   { type:'no',start:0 },  //skip
   { type:'yes',start:10 },//new index starting point
   { type:'yes',start:10 },
   { type:'yes',start:10 }, 
];

let index = 0;
let counter = 0;

let result = data.map((obj) => {
  if (obj['start'] !== 0) { // If start value is 0, goto else block
    if (index !== +obj['start']) { // If start value changes
      index = +obj['start']; // Save start value into index
      counter = +obj['start']; // Save start value into counter
      return obj; // return for first time
    }
    counter += 1; // From second time onwards : Add 1 to saved start value
    obj['start'] = counter; // Update start
    return obj; // Now return the object
  } else {
    index = 0; // Reset index to 0
    return obj; // Return same object
  }
});

console.log(result);
1 голос
/ 10 июля 2020

Вы можете попробовать это. Он увеличит следующий начальный индекс, если 2 элемента равны: вывод будет //1,2,0,0,5,6,0,5,6,0,10,11,12

const data = [ 
   { type:'yes',start:1 }, //count index starting point
   { type:'yes',start:1 },
   { type:'no',start:0 }, //skip
   { type:'no',start:0 }, //skip
   { type:'yes',start:5 }, //new index starting point
   { type:'yes',start:5 },
   { type:'no',start:0 },  //skip
   { type:'yes',start:5 }, //new index starting point
   { type:'yes',start:5 },
   { type:'no',start:0 },  //skip
   { type:'yes',start:10 },//new index starting point
   { type:'yes',start:10 },
   { type:'yes',start:10 }, 
];

let increment = 0;
for(var i = 0; i < data.length -1 ; i++) {
    console.log(data[i].start + increment);
    if (data[i].start !== 0 && data[i].start === data[i+1].start) {
      increment++;
    } else {
      increment = 0;
    }
    if(i === data.length - 2) {console.log(data[data.length-1].start + increment);}
}
1 голос
/ 10 июля 2020

Вы можете использовать карту и al oop

const dataxd = [ { type:'yes',start:1 }, { type:'yes',start:1 }, { type:'no',start:0 }, { type:'no',start:0 }, { type:'yes',start:5 }, { type:'yes',start:5 }, { type:'no',start:0 }, { type:'yes',start:5 }, { type:'yes',start:5 }, { type:'no',start:0 }, { type:'yes',start:10 }, { type:'yes',start:10 }, { type:'yes',start:10 }, ]
 ns=dataxd.map(o=>o.start)
 counter=1
 for (let i=0;i<ns.length;i++){
    if(ns[i]==0) {counter=1;continue}
    else if(ns[i-1]!=0 && i!=0) ns[i]= ns[i]+counter,counter++  
 }
 console.log(ns)
0 голосов
/ 10 июля 2020

Вам нужно использовать какую-то внешнюю управляющую переменную в качестве отправной точки, вот пример:

const data = [ 
 { type:'yes',start:1 }, //count index starting point
 { type:'yes',start:1 },
 { type:'no',start:0 }, //skip
 { type:'no',start:0 }, //skip
 { type:'yes',start:5 }, //new index starting point
 { type:'yes',start:5 },
 { type:'no',start:0 },  //skip
 { type:'yes',start:5 }, //new index starting point
 { type:'yes',start:5 },
 { type:'no',start:0 },  //skip
 { type:'yes',start:10 },//new index starting point
 { type:'yes',start:10 },
 { type:'yes',start:10 }, 
]

let startingPoint = 0

for(var i = 0; i < data.length ; i++){
    if (data[i].start === 0 || startingPoint === 0) {
      startingPoint = data[i].start
    } else {
      startingPoint += 1
      data[i].start = startingPoint
    }
    console.log(data[i].start)
}

//1,2,0,0,5,6,0,5,6,0,10,11,12,13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...