Javascript 如何在对象数组中动态添加id属性?
我有一个简单的部分,用户可以使用表单添加电影细节。我获取用户输入的值并从中创建一个对象,然后将其推入数组。但是,我还希望为每个添加的电影包含一个动态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 }] }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{
我希望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: []
});
})