我正在使用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 });
没有任何成功。
提前致谢。
答案 0 :(得分:1)
除了行
之外,您的代码一切正常 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
中查看此工作演示答案 1 :(得分:1)
如果你的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);
答案 2 :(得分:1)
您可以使用 .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);
&#13;
答案 3 :(得分:1)
为此,您可以使用以下功能。如果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));
答案 4 :(得分:0)
在你的电话addNewValues
中,你应该传递一个数组作为第一个参数(你正在传递一个对象):
var values = [{"firstName":"John", "lastName":"Doe", "id":"1"}];
addNewValues(values , "Jane", "Doe", "2");
答案 5 :(得分:0)
请参阅以下代码。希望这有助于理解您的问题。添加新数组后,在控制台中显示更新的值。
您可以阅读有关Javascript Array Methods: Unshift(), Shift(), Push(), And 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;
}
&#13;
<button type="button" onClick='addNewValues("Jane",
"Doe", "2"); '>Click Me!</button>
&#13;
答案 6 :(得分:0)
您可以使用解决方案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);
&#13;
答案 7 :(得分:-1)
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
希望得到这个帮助。