나는 사람의 작업 일정을 배열에로드하는 일정 관리 시스템에서 작업하고 있으며 사용자는 해당 일 내에 새로운 근무를 "주입"할 수 있습니다. 물론 코드에서 따라야하는 몇 가지 규칙이 있으며, 다음과 같습니다.JavaScript에서 범위를 어떻게 연결합니까?
기존 교대와 추가 된 항목 사이에는 간격이 없어야합니다. 즉, 추가 된 항목의 종료 시간은 첫 번째 항목의 시작 시간과 같거나 커야하며 추가 된 항목의 시작 시간은 마지막 항목의 종료 시간과 같거나 작아야합니다.
추가 된 시프트는 해당 기간 동안 발생하는 기존 시프트를 덮어 써야합니다. 본질적으로 배열에 자체를 접합해야하지만 .splice() 메서드를 사용하는 방법을 잘 모르겠습니다.
영향을받는 시간 블록은 새 항목을 수용하기 위해 잘려서/압축되어야합니다. 예를 들어 한 시간 동안 존재하는 시간 블록이 있고 20 분 안에 그 시작 부분에 10 분 블록을 삽입하면 원래 블록의 처음 20 분 부분에 10 분 추가 된 항목 다음에 원래 블록의 나머지 부분이옵니다. 추가 된 항목은 다른 시간 블록과 겹칠 수 있어야합니다. 따라서 우리가 4 개의 다른 시간 블록 (또는 그 안에서 시작/정지!)을 덮는 3 시간 블록을 추가하면 각각의 시간 블록을 덮어 써야합니다.
기본적으로 범위를 연결하기 때문에이 작업은 충분히 간단하지만 JavaScript에서 범위를 연결하는 방법을 알지 못합니다. 나는 범위는 자바 스크립트에서 스플 라이스 어떻게
var obj = {
start: '',
end: '',
};
var objArray = [];
var tmpArray = [];
var finalArray = [];
objArray.push({start: "12:00", end: "12:45"});
objArray.push({start: "12:45", end: "1:00"});
objArray.push({start: "1:00", end: "1:30"});
objArray.push({start: "1:30", end: "2:30"});
// added object
obj.start = "12:00";
obj.end = "12:10";
for (var i = 0; i < objArray.length; i++) { tmpArray.push(objArray[i]); }
//tmpArray = objArray; // preserve the original array
objArray.push(obj);
console.clear();
console.log("%o", objArray);
objArray.sort(function(a, b) { var x = a.start; var y = b.start; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); });
// sanity check
if (obj.start >= obj.end){
console.log('Time logic is invalid.');
return false;
}
if (obj.end < tmpArray[0].start) {
console.log('There is a gap before the first item.');
return false;
}
if (obj.start > tmpArray[tmpArray.length - 1].end){
console.log('There is a gap after the last item.');
return false;
}
// Now for the fun stuff...
for (var i = 0; i < objArray.length; i++){
var tmpobj = objArray[i];
if (tmpobj.start == obj.start && tmpobj.end == obj.end){ // find our inserted object
index = i;
console.log('<<< obj injected: %s - %s [%d] >>>', obj.start, obj.end, index);
if (index == 0){ // is first item, start time was less than first item's start time
finalArray.push(obj);
if (obj.end == tmpArray[0].start){
finalArray.push(tmpArray[0]); // item insertion was a complete prepend...
} else if (obj.end >= tmpArray[tmpArray.length - 1].end){
console.log('entire array is consumed'); // item covers entire shift...
} else {
// This code is reached when obj start time is before or equal to first item
console.log('obj <= tmpArray[0].start, end > tmpArray[0].start');
}
} else {
if (obj.start == tmpArray[tmpArray.length - 1].end){
console.log('Item added at end of shift');
finalArray.push(tmpArray[i - 1]);
finalArray.push(obj);
}
}
} else {
console.log('obj tested: %s - %s [%d]', tmpobj.start, tmpobj.end, i);
if (obj.start > tmpobj.end) {
finalArray.push(tmpobj);
}
if (obj.end < tmpobj.start) {
finalArray.push(tmpobj);
}
}
// now iterate through array and combine like terms (activity type)
}
for (var i = 0; i < finalArray.length; i++){
console.log('%d) s: %s, e: %s', i, finalArray[i].start, finalArray[i].end);
}
: 여기
는 지금까지 이러한 규칙을 구현하기 위해 작성한 코드입니까?