搜索最大的id并在JSON文件中添加新的最大ID(NodeJS)

时间:2016-08-09 14:58:49

标签: javascript json node.js

执行插入操作时,我正在尝试将下一个最大的id添加到JSON文件中。事情是,当我有例如id:13时,它创建id为14的新对象并重写id为14的旧对象,之后我有2个具有相同id的对象。

我错了什么?

fs.readFile("DB.json", "utf8", function (err, data) {
    var jsonFileArr = [];   // DB.json objects
    jsonFileArr = JSON.parse(data);


    function maxValue(jsonFileArr, prop) { // Searches for the biggest numbers in DB.json
        var max = "";
        for (var i = 0; i < jsonFileArr.length ; i++) {
            if (!max || parseInt(jsonFileArr[i][prop]) > parseInt(max[prop]))
                max = jsonFileArr[i];
        }
        return max;
    }

    var maxID = maxValue(jsonFileArr, "id"); //Biggest ID

    console.log("\r\nBiggest ID : " + maxID.id);
    newID = ++maxID.id;

    var updateData = {
        id : newID, // new ID
        name: POST.name,    // Objects that come from POST request when i add new row in the table
        alter: POST.alter,
        produkt: POST.produkt,
        anzahl: POST.anzahl
    }

    jsonFileArr.push(updateData);
    var newUsers = JSON.stringify(jsonFileArr);
    fs.writeFile("JSON/DB.json", newUsers, "utf8");
    console.log("New user has been added with ID : " + newID);

2 个答案:

答案 0 :(得分:2)

返回指向嵌套对象的指针

max = jsonFileArr[i];

之后你做

newID = ++maxID.id; 

这也会增加jsonFileArr [i] .id属性。

所以为了解决这个问题,只需这样做

newID = maxID.id + 1;

或者只是在函数maxValue中返回max.id;

答案 1 :(得分:1)

用vanilla Javascript编写,因此应该直接在Node.js中使用。

var jsonObj = [{
  "id": 3,
  "player": "Carmelo Anthony",
  "team": "New York Knicks"
}, {
  "id": 1,
  "player": "Andre Drummond",
  "team": "Detroit Pistons"
}, {
  "id": 2,
  "player": "Anthony Davis",
  "team": "New Orleans Pelicans"
}]

function getNextId(obj) {
  return (Math.max.apply(Math, obj.map(function(o) {
    return o.id;
  })) + 1);
}


alert('Next ID is ' + getNextId(jsonObj));