Javascript 如何在对象数组中动态添加id属性?

Javascript 如何在对象数组中动态添加id属性?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个简单的部分,用户可以使用表单添加电影细节。我获取用户输入的值并从中创建一个对象,然后将其推入数组。但是,我还希望为每个添加的电影包含一个动态ID $btnAddMovie.ClickFunction{ console.log'btn-movie-triggered'; var jsonData=[]; var formData=$movieForm.serializeArray; $.eachformData,函数{ console.logformData; jsonData.push{

我有一个简单的部分,用户可以使用表单添加电影细节。我获取用户输入的值并从中创建一个对象,然后将其推入数组。但是,我还希望为每个添加的电影包含一个动态ID

$btnAddMovie.ClickFunction{ console.log'btn-movie-triggered'; var jsonData=[]; var formData=$movieForm.serializeArray; $.eachformData,函数{ console.logformData; jsonData.push{ 标题:formData[0]。值, movieurl:formData[1]。值, 电影ID:'1' }; }; console.logjsonData; var params=JSON.stringify{ 电影:杰森达塔 }; $.ajax{ 键入:“POST”, 数据:{ params:params }, url:“将_保存到_json.php”, 成功:functiondata{ $'msg'.htmldata.fadeIn'slow'; $'msg'.delay2000.fadeOut'slow'; }, 错误:函数{ $'error-msg'.htmldata.fadeIn'slow'; $'error-msg'.delay2000.fadeOut'slow'; } }; }; 上面的解决方案给了我这个答案

{ 电影:[{ 标题:FDFD, movieurl:http:\/\/meed.audencevideo.com\/videos, 电影编号:1 }, { 标题:FDFD, movieurl:http:\/\/meed.audencevideo.com\/videos, 电影编号:1 }] }
我希望movieid动态递增,例如movieid:1、movieid:2等。我需要做什么才能得到我想要的?

从您的代码中,您可以使用$each中回调中的索引

要理解回调,请参阅jquery文档

或者,也可以使用jsonData.length


您可以在回调函数中放入一个参数。参数是index、array,但您只需要index

  $.each(formData, function(i) {
    console.log(formData);
    jsonData.push({
      title: formData[0].value,
      movieurl: formData[1].value,
      movieid: i + 1
    });
  });

这里的朋友提供的大多数解决方案都没有很好的构造,他们没有为我的问题提供完美的解决方案

大多数常见问题都是由@Randy Casburn指出的

这是我的解决方案,我发现效果很好,我想分享会很好,也许会帮助别人

我的json文件如下所示

{
    "movies": [
        {
            "title": "sdsds",
            "movieurl": "https:\/\/meed.audiencevideo.com\/videos\/good_job.mp4",
            "movieid": 1,
            "buttons": []
        },
        {
            "title": "sdsds",
            "movieurl": "https:\/\/meed.audiencevideo.com\/videos\/do_you_want.mp4",
            "movieid": 2,
            "buttons": []
        },
  ]
}
这是我的js

function getNextMovieId() {
        var nextmovieid = 0;
        for (var a = 0; a < movies.length; a++) {
                if( movies[a].movieid>nextmovieid ) {
                        nextmovieid = movies[a].movieid;
                }
        }
        nextmovieid++;
        return nextmovieid;
}

  $("#btnAddMovie").click(function(e){

   var formData = $("#movieForm").serializeArray();
                             console.log(formData);
                             movies.push({
                                title: formData[0].value,
                                movieurl: formData[1].value,
                                movieid:  getNextMovieId(),
                                buttons: []
                            });

})

movieId值应该从哪里来?如果希望它们是增量的,那么属性似乎是完全冗余的,因为该值将只是数组中对象的索引+1是否希望数组中的每个元素都有此增量?应在服务器上合并数据的位置创建唯一ID。当30个用户都在客户端添加电影,然后数据在服务器上聚合时会发生什么情况?你能保证唯一性吗?嗨,伙计们,我只想要一个唯一的Id,总是应该与rest@user9964622-始终应与服务器上的其余部分不同?在每次新运行is代码时,ID将被复制,因为它们总是以零数组长度开始。注意-OP正在将此阵列推送到服务器。您仍然在客户端上派生ID,而不考虑服务器上已有的ID。这也不行。@RandyCasburn更新了ans,我以前的解决方案也可以。我使用的是jsonData.length,当对象被推入时,它会在每次更新。这个问题并没有提到任何关于服务器的内容。这是在客户端完成的,而不考虑服务器上的内容。你没抓住重点。虽然问题不是这样,但OP正在将数据推送到服务器上——在服务器上,数据将不再是唯一的,并且很可能最终会重写以前的id记录。这与其他答案不起作用的原因相同。您在客户端上派生Id,而不考虑服务器上已有的Id。每次加载新页面时,每次运行JS时,ID都会重复。我知道,但还有什么其他方法?还有其他方法吗?有两种方法:1打电话给服务器以获取下一个不推荐使用的id,或2让服务器应用该id。2已使用超过20年。
{
    "movies": [
        {
            "title": "sdsds",
            "movieurl": "https:\/\/meed.audiencevideo.com\/videos\/good_job.mp4",
            "movieid": 1,
            "buttons": []
        },
        {
            "title": "sdsds",
            "movieurl": "https:\/\/meed.audiencevideo.com\/videos\/do_you_want.mp4",
            "movieid": 2,
            "buttons": []
        },
  ]
}
function getNextMovieId() {
        var nextmovieid = 0;
        for (var a = 0; a < movies.length; a++) {
                if( movies[a].movieid>nextmovieid ) {
                        nextmovieid = movies[a].movieid;
                }
        }
        nextmovieid++;
        return nextmovieid;
}

  $("#btnAddMovie").click(function(e){

   var formData = $("#movieForm").serializeArray();
                             console.log(formData);
                             movies.push({
                                title: formData[0].value,
                                movieurl: formData[1].value,
                                movieid:  getNextMovieId(),
                                buttons: []
                            });

})