3.条件判断和循环

请创建一个永久循环,在循环中,提示用户输入两个数字,并打印出两个数字区间内的所有奇数。如果用户输入1和5,就打印出1,3,5。如果用户输入的第一个数字大于第二个数字,就结束循环。

while(true) {
    var num1 = window.prompt("Enter number 1: ");
    var num2 = window.prompt("Enter number 2: ");
    if(num1 > num2) {
        break;
    }
    for (var i = num1; i <= num2; i++) {
        if (i % 2 != 0) {
        console.log(i);
        }
    }
}

4.函数和参数

请自定义一个函数sumArray(array1, array2),参数必须是两个长度相同的数组,然后在函数中将两个数组中的元素依次相加,返回一个含有相加元素的新数组。以下是调用此方法的效果:

var array1 = [1, 5, 8, 9];
var array2 = [2, 4, 8, 1];
var newArray = sumArray(array1, array2); // [3. 9, 16, 10]

答案:

function sumArray(array1, array2) {
    var newArray = []
    for (var i = 0; i < array1.length; i++) {
        newArray.push(array1[i] + array2[i]);
    }
    return newArray;
}

5.面对对象

创建一个Car对象类型,其中包含brand,model,year属性。这个类初始化的时候必须要传入品牌名字(比如Subaru),初始化的时候车的型号和生产年会被默认设定为’xxx’和0,Car类型中还需要用内置方法用于修改车型号和生产年,还有可以打印出完整车信息的方法。

请根据要求使用function定义出这个完整的对象类型,并使用此类型创建一个对象,然后使用内置方法修改车的型号和生产年,最后使用类的方法打印出车的完整信息。

对象类型的定义:

function Car(brand) {
    this.brand = brand;
    this.model = "xxx";
    this.year = 0;
    this.set_model = function(model) {
        this.model = model;
    }; 
    this.set_year = function(year) {
        this.year = year;
    };
    this.get_info = function() {
        console.log(`Brand: Branch: ${this.brand}, Model: ${this.model}, Year: ${this.year}`);
    };
};

Car 类型的调用:

var new_car = new Car("Subaru");
new_car.set_model("WRX");
new_car.set_year(2014);
new_car.get_info();

7.REST NodeJS

请使用 NodeJS 创建以下三个API:

  • GET:/json_file?name=xxx 获取特定命名 JSON 文件的内容
  • POST: /json_file?name=xxx 通过POST请求在 body 中传入 JSON 数据,更新特定文件,如文件不存在,则新建文件
  • DELETE:/json_file?name=xxxx 删除特定命名的 JSON 文件

代码:

const fs = require('fs')
var express = require('express');
var app = express();
app.use(express.json()); // JSON parser for post request

app.get('/json_file', (req, res) => {
    try {
        let data = fs.readFileSync(`${__dirname}/${req.query.name}.json`)
        res.json(JSON.parse(data));
    } catch (err) {
        console.error(err);
        res.send({'error': err.toString()});
    }
});

app.post('/json_file', (req, res) => {
    try {
        const fileName = __dirname + '/' + req.query.name + '.json';
        bodyData = req.body;
        fs.open(fileName, 'r', (err, fd) => {
            if (err) {
                fs.writeFile(fileName, JSON.stringify(bodyData), (err) => { if (err) console.log(err); }); // Create new file
            } else {
                let fileContent = JSON.parse(fs.readFileSync(fileName, 'utf8')); // Read file content 
                Object.keys(bodyData).forEach( (key) => {fileContent[key] = bodyData[key];});
                fs.writeFileSync(fileName, JSON.stringify(fileContent)); // Write content to the file
            }
        })
        res.send({'success': 'File successfully updated.'})
    } catch (err) {
        console.log(err);
        res.send({'error': 'Update json file failed.'})
    }
})

app.delete('/json_file', (req, res) => {
    try {
        fs.unlinkSync(__dirname + "/" + req.query.name + '.json');
        res.send({'success': 'File deleted.'})
    } catch (err) {
        console.log(err);
        res.send({'error': 'Delete file failed.'})
    }
});

const port = 8080;
app.listen(port, () => {
    console.log(`Server listening at http://localhost:${port}`)
})