如何向javascript数组中的每个对象动态添加属性

如何向javascript数组中的每个对象动态添加属性,javascript,object,handsontable,Javascript,Object,Handsontable,我试图循环遍历一个对象数组,为每个对象预先添加属性和值。表的顺序很重要,因为我尝试使用一个handsontable视图作为客户端来检索服务器端mysql表的内容。我希望handsontable视图具有与表相同的列顺序,但我希望插入一个复选框列作为第一列,以允许选择记录。我有一个做循环的提琴,但我不知道如何预先设置每个对象的属性值对。数组取消移位似乎适用于数组。我想要一个对象的结果,以便从中查看: Object { car="Audi A4 Avant", year=2011, available

我试图循环遍历一个对象数组,为每个对象预先添加属性和值。表的顺序很重要,因为我尝试使用一个handsontable视图作为客户端来检索服务器端mysql表的内容。我希望handsontable视图具有与表相同的列顺序,但我希望插入一个复选框列作为第一列,以允许选择记录。我有一个做循环的提琴,但我不知道如何预先设置每个对象的属性值对。数组取消移位似乎适用于数组。我想要一个对象的结果,以便从中查看:

Object { car="Audi A4 Avant", year=2011, available=true, more...}
致:


如何实现这一点

下面是一个使用小提琴中的
getCarData
函数的示例。它允许您通过将此功能包装在一个简单的类中(称为
PrependableObject
)来预先将键添加到对象

PrependableObject=函数(obj){
this.obj=obj;
}
PrependableObject.prototype.prepend=函数(键,val){
var newObj=新对象(),
oldKeys=Object.keys(this.obj);
newObj[key]=val;
对于(变量i=0;i

有关更多信息,请参阅。

我在你的小提琴中没有看到循环。拿着对象并写入
anObject.checkbox=false
?“Prepending”对命名属性没有多大意义。为什么属性的顺序对您很重要?Kim,属性的顺序很重要,因为我想预先设置一个handsontable复选框列。@user61629对象的属性没有顺序。谢谢,这确实回答了问题唯一的问题是顺序(或缺少)在一个对象中。请看我上面的注释。Nit,虽然从服务器端传输的ajax javascript对象对其属性没有顺序,但这仅仅是由columns属性设置的,该属性接受一个数组(ordered)是的,这是正确的。列的顺序由
columns
配置定义。如果未在此处设置,则顺序可能是任意的。
PrependableObject = function(obj){

    this.obj = obj;

}

PrependableObject.prototype.prepend = function(key, val){

    var newObj  = new Object(),
        oldKeys = Object.keys(this.obj);

    newObj[key] = val;

    for (var i=0; i< oldKeys.length; i++){

        newObj[oldKeys[i]] = this.obj[oldKeys[i]];
    }

    return newObj;

}

function getCarData() {
    return [
      {car: "Mercedes A 160", year: 2006, available: true, comesInBlack: 'yes'},
      {car: "Citroen C4 Coupe", year: 2008, available: false, comesInBlack: 'yes'},
      {car: "Audi A4 Avant", year: 2011, available: true, comesInBlack: 'no'},
      {car: "Opel Astra", year: 2004, available: false, comesInBlack: 'yes'},
      {car: "BMW 320i Coupe", year: 2011, available: false, comesInBlack: 'no'}
    ];
 }

var carData = getCarData();

carData.forEach(function(obj, index){

    var obj = new PrependableObject(obj),
        newObj = obj.prepend('check', false);

    carData[index] = newObj;
});

// To prove the keys are in the correct order
var car1 = carData[0];

Object.keys(car1).forEach(function(key, i){

    console.log(key + ' = ' + car1[key]);

});
var cars = [
  {car: "Mercedes A 160", year: 2006, available: true, comesInBlack: 'yes'},
  {car: "Citroen C4 Coupe", year: 2008, available: false, comesInBlack: 'yes'},
  {car: "Audi A4 Avant", year: 2011, available: true, comesInBlack: 'no'},
  {car: "Opel Astra", year: 2004, available: false, comesInBlack: 'yes'},
  {car: "BMW 320i Coupe", year: 2011, available: false, comesInBlack: 'no'}
];
for (i in cars) {
  cars[i].checkbox = false;
}
var hot = new Handsontable(container,{
  data: cars,
  /* Other config */
  columns: [
    {data: "checkbox", type: 'checkbox'},
    {data: "car", type: 'text'}
    /*Other columns*/
  ]
});