2016-08-09 1 views
1

При выполнении операции вставки я пытаюсь добавить следующий самый большой идентификатор в файл JSON. Дело в том, что когда у меня есть id id: 13, он создает новый объект с id: 14 и перезаписывает старый объект с id: 14, после этого у меня есть 2 объекта с одним и тем же идентификатором.Найти самый большой идентификатор и добавить новый самый большой идентификатор в файле JSON (NodeJS)

Что я сделал не так?

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

Итак, ваше намерение состоит в том, чтобы получить следующий самый высокий идентификатор из JSON? – Iceman

ответ

1

Написано в ванили 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));

+0

работает как очарование! Благодаря ! –

+0

@ KirillVorobjov рад, что он помогает. – Iceman

+0

желающий u сделал upvote. – Iceman

2

Вы возвращает указатель на объект вложенного

max = jsonFileArr[i]; 

После того, что вы делаете

newID = ++maxID.id; 

который увеличит jsonFileArr [я] .id свойство тоже.

Так что для того, чтобы исправить это просто сделать, как этот

newID = maxID.id + 1; 

или просто вернуться max.id в функции MaxValue;

+0

Простая демонстрация https://jsbin.com/wawaticesi/edit?js,console –

+0

Спасибо за ваше время и помощь!) –

Смежные вопросы