[英]Add new object in JSON array
我正在使用javascript和JSON。 我有一個像這樣的JSON對象:
{"firstName":"John", "lastName":"Doe", "id":"1"}
就我而言,我有一個像這樣的功能:
function addNewValues(jsonArray, firstName, lastName, id)
如果“firstName”不匹配,我應該在數組中創建一個新值。
從
addNewValues({"firstName":"John", "lastName":"Doe", "id":"1"}, "Jane",
"Doe", "2");
它應該返回:
[
{"firstName":"John", "lastName":"Doe", "id":"1"},
{"firstName":"Jane", "lastName":"Doe", "id":"2"}
]
我該如何添加這個新職位? 我試過myObj.push({"firstName":firstName, "lastName":lastName });
沒有任何成功。
提前致謝。
除了線路以外,您的代碼一切正常
addNewValues({"firstName":"John", "lastName":"Doe", "id":"1"}, "Jane", "Doe", "2");
您應該傳遞JSON數組(假設您已經編寫了該函數),但是現在您只傳遞JSON對象。
試試這個
addNewValues([{"firstName":"John", "lastName":"Doe", "id":"1"}], "Jane", "Doe", "2");
一旦你這樣做,下面提到的行將執行沒有任何錯誤。
myObj.push({"firstName":firstName, "lastName":lastName });
您還可以在jsfiddle中查看此工作演示
如果你的json是一個字符串,你必須用JSON.parse
解析它,然后把它放到數組中,如果不是的話。
var array = []; // with push function addNewValues(firstName, lastname, id) { // check if firstName already exists if(array.filter(function(x) { return x.firstName===firstName; }).length===0) { array.push({ 'firstName': firstName, 'lastName': lastname, 'id': id }); } } // with concat // I would suggest you to use this method function addNewValues1(arr, firstName, lastname, id) { if(arr.filter(function(x) { return x.firstName===firstName; }).length===0) { return arr.concat([{ 'firstName': firstName, 'lastName': lastname, 'id': id }]); } return arr; } addNewValues("Jahn", "Doe", "1"); addNewValues("Jane", "Doe", "2"); console.log(array); // with concat array = addNewValues1(array, "Foo", "Bar", "3"); console.log(addNewValues1(array, "Foo1", "Bar1", "4")); console.log(array);
您可以使用.some()
方法來測試給定數組是否包含具有此firstName
的對象,然后使用這些屬性推送新對象。
這是你的代碼應該如何:
function addNewValues(jsonArray, firstName, lastName, id){
if(!jsonArray.some(function(obj){
return obj.firstName === firstName;
})){
jsonArray.push({"firstName": firstName, "lastName" : lastName, "id": id});
};
}
演示:
var jsonArray = [{"firstName":"John", "lastName":"Doe", "id":"1"}]; function addNewValues(jsonArray, firstName, lastName, id){ if(!jsonArray.some(function(obj){ return obj.firstName === firstName; })){ jsonArray.push({"firstName": firstName, "lastName" : lastName, "id": id}); }; } addNewValues(jsonArray, "Jane", "Doe", "2"); console.log(jsonArray);
為此,您可以使用以下功能。 如果firstname存在,它將更新記錄,否則它將創建一個新條目。 下面的函數將找到給定firstname的第一個條目。
let obj = { "firstName": "John", "lastName": "Doe", "id": "1" }; function addNewValues(arr, firstName, lastName, id) { arr = Array.isArray(arr) ? arr : [arr]; let obj = arr.find(v => v.firstName === firstName); if (! obj) { return arr.concat({firstName, lastName, id}); } obj.lastName = lastName; obj.id = id; return arr; } console.log(addNewValues(obj, "Jane", "Foo", 3));
在你的調用addNewValues
,你應該傳遞一個數組作為第一個參數(你傳遞一個對象):
var values = [{"firstName":"John", "lastName":"Doe", "id":"1"}];
addNewValues(values , "Jane", "Doe", "2");
請看下面的代碼。 希望這有助於理解您的問題。 添加新數組后,在控制台中顯示更新的值。
您可以閱讀有關Javascript數組方法的更多信息:Unshift(),Shift(),Push()和Pop()
var jsonArray=[{"firstName":"John", "lastName":"Doe", "id":"1"}]; function addNewValues(firstName, lastName, id){ // here you can check if exists or not jsonArray.push({"firstName":firstName, "lastName":lastName,"id":id }); console.log(jsonArray); return jsonArray; }
<button type="button" onClick='addNewValues("Jane", "Doe", "2"); '>Click Me!</button>
在這里,您可以使用解決方案https://jsfiddle.net/52q9v57j/
var jsonArray = [{"firstName":"John", "lastName":"Doe", "id":"1"}]; addNewValues = function(jsonArray, firstName, lastName, id){ return jsonArray.push( {"firstName": firstName, "lastName": lastName, "id": id} ); } addNewValues(jsonArray, "Jane", "Doe", "2"); console.log(jsonArray);
newArray = [];
newArray.push(jsonArray);
function addNewValues(newArray, firstname, lastname, id){
jsonArray.push({
'firstName': firstname,
'lastName': lastname,
'id': id
});
return newArray;
}
newArray = addNewValues(newArray, 'Jane', 'Doe', '2');
// newArray now is array of 2 jsonObject
希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.