在JSON数组中添加新对象

时间:2017-07-10 11:28:09

标签: javascript arrays json object

我正在使用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 }); 没有任何成功。

提前致谢。

8 个答案:

答案 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});
      };
}

<强>演示:

&#13;
&#13;
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;
&#13;
&#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()

的更多信息

&#13;
&#13;
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;
&#13;
&#13;

答案 6 :(得分:0)

您可以使用解决方案https://jsfiddle.net/52q9v57j/

&#13;
&#13;
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;
&#13;
&#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

希望得到这个帮助。