2016-08-09 2 views
1

挿入操作を実行すると、JSONファイルに次に大きいIDを追加しようとしています。事は、例えばid:13の場合、id:14の新しいオブジェクトを作成し、id:14の古いオブジェクトを書き換えた後、同じIDを持つ2つのオブジェクトがあることです。JSONファイル(NodeJS)で最大のIDを検索して最大の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

だから、あなたの意図は、JSONから次に高いIDを取得するのですか? – 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

希望しましたupvote。 – Iceman

2

あなたはあまりにもjsonFileArr [I] .IDプロパティを増加します

newID = ++maxID.id; 

を行い、その後、ネストされたオブジェクト

max = jsonFileArr[i]; 

へのポインタを返します。

だから、これはただ単にこの

newID = maxID.id + 1; 

など行う固定するための関数maxValueの中max.id返します。

+0

シンプルなデモンストレーションhttps://jsbin.com/wawaticesi/edit?js,console –

+0

あなたの時間と助けてくれてありがとう!) –