2015-01-02 7 views
2

Я пытаюсь перебрать массив объектов, чтобы добавить свойство и значение для каждого объекта. Порядок таблиц важен, потому что я пытаюсь использовать для просмотра содержимого таблицы mysql на стороне сервера. Я хочу, чтобы в удобном виде был тот же порядок столбцов, что и таблица, но я хочу вставить столбец флажка в качестве первого столбца, чтобы разрешить выбор записи. У меня есть скрипт http://jsfiddle.net/kc11/juo1e4at/#base, который делает цикл, но я не уверен, как добавить пару свойств-свойства каждого объекта. array unshift представляется для массивов. Я хотел бы результат объекта смотреть перейти от:Как добавить свойства динамически к каждому объекту в массиве javascript

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

к:

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

Как я могу сделать это случиться

+0

Я не вижу петли в вашей скрипке. – sgroves

+0

Возьмите объект и напишите 'anObject.checkbox = false'? «Prepending» на самом деле не имеет особого смысла для названных свойств. –

+0

Почему для вас имеет значение заказ свойств? – Trace

ответ

2

Порядок свойств объекта Javascript не имеет значения, они не строго упорядочены.
Учитывая

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; 
} 

Теперь, возвращаясь к вопросу о порядке столбца Handsontable (который на самом деле главная проблема вопроса), вы можете определить его следующим образом:

var hot = new Handsontable(container,{ 
    data: cars, 
    /* Other config */ 
    columns: [ 
    {data: "checkbox", type: 'checkbox'}, 
    {data: "car", type: 'text'} 
    /*Other columns*/ 
    ] 
}); 

Смотрите the manual для дальнейшей информации.

+0

Nit. Справедливости ради стоит сказать, что хотя ajax передал объекты javascript со стороны сервера, у них нет порядка в свойстве свойств, это задается только свойством columns, которое принимает массив (упорядоченный) объектов в handsontable? – user61629

+0

@ user61629 Да, это правильно. Порядок столбцов определяется конфигурацией 'columns'. Если он там не установлен, порядок может быть произвольным. – Nit

0

Вот пример использования getCarData функцию в скрипка. Он позволяет добавлять ключи к объекту, обертывая эту функциональность в простом классе (так называемый PrependableObject).

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]); 

}); 

Обновлено скрипка:

http://jsfiddle.net/juo1e4at/4/

Конечно, логика в вашем forEach цикла может сделать что-нибудь (например, использовать модель автомобиля, чтобы определить, какой динамическое значение для назначения объекта, год автомобиля и т. д.).

+0

Спасибо, что отвечает на вопрос, единственным вопросом является заказ (или его отсутствие) в объекте. См. Мою заметку выше. – user61629

+0

См. Мое редактирование, которое позволит вам это сделать – foxygen

Смежные вопросы