设置对象文字数组以将值传递给服务器

Setting up a object literal array to pass values to a server

本文关键字:值传 服务器 对象 文字 数组 设置      更新时间:2023-09-26

我正在向http服务器传递大量变量。我不想写一个长命令提示符,而是想将变量设置为对象文字。如果我静态地设置它,它可以正常工作。但我想在循环中填充对象。这项工作:

var data= { T1: 123,
              R1: 'L',
              T2: 3434,
              R2: 'R'};
$.post(url,data, get_outcome);

但我想写一个这样做的循环,我需要了解如何用我的变量名和值填充对象文字。(这个例子只是为了演示)如果我这样尝试,它会失败:

var data=[];
data.push({T1: 123});
data.push({T2: 3434});
data.push({R1: 'L'});
data.push({R2: 'R'});
$.post(url,data, get_outcome);

我甚至尝试过这个:

var data=[];
 var a,val,name;
     name={"T1","T2","R1","R2"};
     val={"123","3434","L","R"};
 for(a=0;a<4;a++){   
   data.push({name[a]:val[a]});
 }
 $.post(url,data,get_outcome);

最后的功能应该是这样的:

function Save(var values, var val){
 var a,name;
 var data=[];
  for(a=0;a<values;a++){
      name="T"+(a+1);
      data.push({name: val[a]});
      } 
   $.post(url,data,get_outcome);
  }

我做错了什么?

我执行了Rajiv建议的解决方案如下:

function save(){
  var data=[];
  function dataPush(name, val) {
         var obj = {};
         obj[name] = val;
         data.push(obj);
     }
           //eg hardcoded values 
        dataPush('T1',123);
        dataPush('T2',3123);
        dataPush('R1',"R");
        dataPush('R2',"L");  
           // values stored in arrays elsewhere
    for(a=2;a<max;a++){
        temp="T"+(a+1);
        dataPush(temp,T[a]);
        temp="R"+(a+1);
        dataPush(temp,R[a]);
    }

    $.post(url,data, get_outcome);
   }

您正在创建一个数组。像这样创建

var data={};
data.T1 = 123;
data.T2 = 3434;
data.R1 = 'L';
data.R2 = 'R';
$.post(url,data,get_outcome);

当使用阵列时

var data={};
var a,val,name;
name={"T1","T2","R1","R2"};
val={"123","3434","L","R"};
for(a=0;a<4;a++){   
   data[name[a]] = val[a];
}
var data = {};
var name = ["T1", "T2", "R1", "R2"];
var val = [123, 3434, "L", "R"];
name.forEach(function(el, index){
   data[el] = val[i];
});

将产生

 var data= {  T1: 123,
              R1: 'L',
              T2: 3434,
              R2: 'R'
           };
       var arry = [];
       function dataPush(name, val) {
            var obj = {};
            obj[name] = val;
            arry.push(obj);
        }
        KeyName =["T1","T2","R1","R2"];
        KeyVal = ["123", "3434", "L", "R"];
        for (var i = 0; i < KeyName.length; i++) {
                dataPush(KeyName[i], KeyVal[i]);
        }
        console.log(arry);

之后使用此阵列

我从您的问题中了解到的只是,您需要创建一个对象并将其发送到服务器。对象需要有一些您想要动态添加的属性,而不是静态添加。

如果是这样,你可以这样做:

var localData = [{key1: 'val1'},{key2: 'val2'},{key3: 'val3'}, {key4: 'val4', key5:'val5'}] // your data that you want to send 
function createPayload(localData) {
 var payload = {}; 
 localData.forEach(function(o) {
  for(var key in o) {
    payload[key] = o[key]; 
  }
 });
 return payload;
}
var objectToSend = createPayload(localData); 
console.log(objectToSend);