[ { start_time: '1', end_time: '10' },
  { start_time: '3', end_time: '15' } ] 

Diese Objekte sind mehrfach ...

Dies ist mein Zeitbereichsarray. Wenn das erste Objekt start_time 1 hat und end_time 10 ist, dann ist das zweite Objekt start_time nicht zwischen 1 und 10.

Ich möchte, dass das zweite Objekt start_time größer ist als das erste Objekt end_time.

Erwartete Ausgabe.

[ { start_time: '1', end_time: '10' },
{ start_time: '11', end_time: '15' } ] 
0
Hirdesh Singh 24 Feb. 2020 im 09:02

4 Antworten

Beste Antwort

Sie müssen lediglich Objektelemente durchlaufen und Daten ändern, wenn diese geringer sind als erforderlich:

var data = [ { start_time: '1', end_time: '10' },
  { start_time: '3', end_time: '15' } ] ;
  
var temp = null;
for(var index=0; index< data.length; index++) {
   if (temp && parseInt(data[index].start_time) <= parseInt(temp)) {
      data[index].start_time = (parseInt(temp)+1).toString();
   }
   temp = data[index].end_time;
} 

console.log(data);
0
Bilal Siddiqui 24 Feb. 2020 im 06:26

Verwenden Sie eine temporäre Variable (z. B. Zeit) und vergleichen Sie start_time und time, bevor Sie auf ein neues aktualisiertes Array übertragen.

const data = [
  { start_time: "1", end_time: "10" },
  { start_time: "3", end_time: "15" }
];

let time = -Infinity;
const updated = [];

data.forEach(({ start_time, end_time }) => {
  updated.push({ start_time: String(Math.max(time, start_time)), end_time });
  time = Number(end_time) + 1;
});

console.log(updated);
1
Siva Kondapi Venkata 24 Feb. 2020 im 06:22

Benutze das:

 var arr = [ 
   { start_time: '1', end_time: '10'},
   { start_time: '3', end_time: '9'},
   { start_time: '5', end_time: '10'},
   { start_time: '10', end_time: '15'} 
 ];

 var modifiedArr = arr.map((item, index)=>{ return checkObject(item,index);})

 function checkObject(item, index) {
  if(index == 0) return item;
  let prevItem = arr[index-1];
  if(parseInt(item.start_time) < parseInt(prevItem.end_time)){
    item.start_time = parseInt(prevItem.end_time) + 1;
  }
  if(parseInt(item.end_time) <= parseInt(item.start_time)){
   item.end_time = parseInt(item.start_time) + 1;
  }

  return item;
 }
 console.log(modifiedArr);
0
harsh_apache 24 Feb. 2020 im 06:47

Ich habe einen Anfangscode mit einfachem if-Bedingungscode ausprobiert. Sie können darauf verweisen, ob es für Sie funktioniert. Bitte überprüfen Sie den folgenden Code.

 for (var i = 0; i < obj.length - 1; i++) {
     if (Number(obj[i + 1].start_time) <= Number(obj[i].end_time)) {
         alert("start_time must be greater than previous end_time");
     }
 }
0
Ishan Shah 24 Feb. 2020 im 06:53