编辑代码

data1 = [-1, -1, -1, 10, 12, 14, 16, -1, -1, -1, 20, 33, 44, -1, -1, 123, 11, 903, -1, -1];
    resultData1 = reverseData(data1, -1);

    debugger;

    data2 = [null, null, null, 10, 12, 14, 16, null, null, null, 20, 33, 44, null, null, 123, 11, 903, null, null];
    resultData2 = reverseData(data2, null);

    debugger;

    function reverseData(srcData, nullValue) {
        let resultData = new Array(srcData.length);

        let i = 0;
        while (i < srcData.length) {
            if (srcData[i] === nullValue) {
                let startData = null;
                let endData = null;

                if (i !== 0) {
                    startData = srcData[i - 1];
                }
                let j = i + 1;
                for (; j < srcData.length; j++) {
                    if (srcData[j] !== nullValue) {
                        endData = srcData[j];
                        break;
                    }
                }

                if (startData == null && endData == null) {
                    break;
                } else if (startData != null && endData == null) {
                    resultData[i - 1] = startData;
                    for (; i < srcData.length; i++) {
                        resultData[i] = startData;
                    }
                } else if (startData == null && endData != null) {
                    for (; i <= j; i++) {
                        resultData[i] = endData;
                    }
                } else {
                    resultData[i - 1] = startData;

                    let step = (endData - startData) / (j - i + 1);
                    let step_i = 1
                    while (i < j) {
                        resultData[i] = Math.floor(startData + step * step_i);
                        i++
                        step_i++;
                    }
                    resultData[i] = endData;
                    i++;
                }
            } else {
                resultData[i] = null;
                i++;
            }
        }

        if (nullValue != null) {
            i = 0;
            while (i < srcData.length) {
                if (srcData[i] === nullValue) {
                    srcData[i] = null;
                }
                i++;
            }
        }

        return resultData;
    }