执行插入操作时,我正在尝试将下一个最大的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);
答案 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));