Есть ли в jQuery какая-либо утилита, которая может взять массив значений свойств и сопоставить их с объектом json? - PullRequest
0 голосов
/ 26 января 2011

Доброе утро, я пытаюсь создать массив объектов javascript из набора массивов.Я хочу, чтобы каждый объект выглядел так.но возьмите элементы массива в качестве свойств.

{
'Miles':0
, 'Drain flush and refill cooling system' : false
, 'Lubricate chassis':false
, 'Replace automatic transaxle fluid and filter':false
, 'Replace engine air cleaner filter':false
, 'Replace engine oil':false
, 'Replace engine oil filter':false
, 'Replace spark plugs':false
, 'Rotate tires':false
, 'Inspect brake system':false
, 'Inspect drive axle boots':false
, 'Inspect engine accessory drive belt':false
, 'Inspect engine air cleaner filter':false
, 'Inspect engine cooling system hoses and clamps':false
, 'Inspect exhaust system':false
, 'Inspect fuel system':false
, 'Inspect spark plug wires':false
, 'Inspect steering system':false
, 'Inspect suspension system':false
, 'Inspect throttle system':false 
}

У меня есть массив значений, которые я хотел бы использовать для установки этих значений свойств.Что-то похожее на jQuery расширяется.Для переопределения значений по умолчанию новыми значениями, кроме использования массива вместо хеша.Пример

    [7500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]. 

Кто-нибудь может указать мне правильное направление?У меня есть 50 таких массивов, или я просто напечатал бы объекты.Я пытаюсь сэкономить немного времени, выполняя какой-то цикл и создавая массив объектов.В конечном итоге массив объектов будет управлять таблицей HTML на веб-странице.Я ценю любые советы или приемы для достижения этой цели.

Приветствия,
~ CK в Сан-Диего

Ответы [ 5 ]

1 голос
/ 26 января 2011

Как насчет: http://jsfiddle.net/vUg66/

function CarSpecs(arr) {
  for (var i=0; i < arr.length; i++) {
    this[ this.arrayMap[i] ] = arr[i];
  }
}

/** Array specifying the location of each key in the input array */
CarSpecs.prototype.arrayMap = [
  'Miles',
  'Drain flush and refill cooling system',
  'Lubricate chassis',
  'Replace automatic transaxle fluid and filter',
  'Replace engine air cleaner filter',
  'Replace engine oil',
  'Replace engine oil filter',
  'Replace spark plugs',
  'Rotate tires',
  'Inspect brake system',
  'Inspect drive axle boots',
  'Inspect engine accessory drive belt',
  'Inspect engine air cleaner filter',
  'Inspect engine cooling system hoses and clamps',
  'Inspect exhaust system',
  'Inspect fuel system',
  'Inspect spark plug wires',
  'Inspect steering system',
  'Inspect suspension system',
  'Inspect throttle system'
];


var input = [7500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true];

console.log(new CarSpecs(input));

Вам не нужен объект CarSpecs, и вы могли бы просто реализовать функцию, которая преобразует массив в объект, хотя я думаю, что конструктор CarSpecs более сексуальный.

function carArrayToObj(array) {
  var arrayMap =  [
      'Miles',
      'Drain flush and refill cooling system',
      'Lubricate chassis',
      'Replace automatic transaxle fluid and filter',
      'Replace engine air cleaner filter',
      'Replace engine oil',
      'Replace engine oil filter',
      'Replace spark plugs',
      'Rotate tires',
      'Inspect brake system',
      'Inspect drive axle boots',
      'Inspect engine accessory drive belt',
      'Inspect engine air cleaner filter',
      'Inspect engine cooling system hoses and clamps',
      'Inspect exhaust system',
      'Inspect fuel system',
      'Inspect spark plug wires',
      'Inspect steering system',
      'Inspect suspension system',
      'Inspect throttle system'
    ];
  var obj = {};
  for (var i=0; i<array.length) {
    obj[arrayMap[i]] = array[i];
  }
  return obj;
}

Вот что, я думаю, вы должны были сделать

var intervals =[[7500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [15000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [22500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [30000,false,true,false,true,true,false,false,true,false,true,true,true,true,true,true,false,true,true,true], [37500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [45000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [52500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [60000,false,true,true,true,true,false,false,true,false,true,true,true,true,true,true,false,false,true,true], [67500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [75000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [82500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [90000,false,true,false,true,true,false,false,true,true,true,true,true,true,true,true,false,true,true,true], [97500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [100000,true,true,false,true,true,false,true,true,false,false,true,true,true,true,true,true,true,true,true], [105000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [112500,false,true,false,true,true,false,false,true,false,true,true,true,true,true,true,false,true,true,true], [120000,false,true,true,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [127500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [135000,false,true,false,true,true,false,false,true,false,true,true,true,true,true,true,false,true,true,true], [142500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true], [150000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]];

function createColumnArray(intervals) {
  var intervalSpecs = [];

  $.each(intervals, function(idx, arr){
    intervalSpecs.push(new CarSpec(arr))
  });
  return intervalSpecs;
}

Приветствия от SD тоже!

0 голосов
/ 27 января 2011

Я опаздываю на вечеринку здесь, но я хотел бы сделать другое предложение.

Поскольку вы сказали, что это преобразование в конечном итоге предназначено для обеспечения рендеринга HTML-таблицы, я быпредлагаем пропустить этот шаг полностью.Вместо этого используйте шаблонизатор, такой как jQuery Templates, для правильной визуализации массива за один шаг.

Например, для данного массива данных:

var data = {
  values: [7500, false, true, false, true, true, false, false, true, false, false, true, true, true, true, true, false, true, true, true]
};

Вы можете использовать определение шаблонов jQuery.например:

<script type="text/x-jquery-tmpl" id="template">
 <tr>
  <td>Miles</td>
  <td>${values[0]}</td>
 </tr>
 <tr>
  <td>Drain flush and refill cooling system</td>
  <td>${values[1]}</td>
 </tr>
 <tr>
  <td>Lubricate chassis</td>
  <td>${values[2]}</td>
 </tr>
 <tr>
  <td>Replace automatic transaxle fluid and filter</td>
  <td>${values[3]}</td>
 </tr>
 <tr>
  <td>Replace engine air cleaner filter</td>
  <td>${values[4]}</td>
 </tr>
 <!-- Etc... -->
</script>

Чтобы отобразить массив в виде таблицы и вставить его в пустую контейнерную таблицу с идентификатором displayTable, используя этот JavaScript (при условии, что jQuery и jQuery-tmpl уже включены):

$('#template').tmpl(data).appendTo('#displayTable');

Рабочая демонстрация здесь, с улучшением и логического рендеринга: http://jsfiddle.net/bJfvh/

0 голосов
/ 26 января 2011

Я закончил этим. Я не проверял это, но это должно сделать это. Я надеялся, что у jQuery был ярлык для этого.

function createColumnArray(){

var intervals = [
    [7500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [15000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [22500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [30000,false,true,false,true,true,false,false,true,false,true,true,true,true,true,true,false,true,true,true]
    , [37500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [45000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [52500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [60000,false,true,true,true,true,false,false,true,false,true,true,true,true,true,true,false,false,true,true]
    , [67500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [75000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [82500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [90000,false,true,false,true,true,false,false,true,true,true,true,true,true,true,true,false,true,true,true]
    , [97500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [100000,true,true,false,true,true,false,true,true,false,false,true,true,true,true,true,true,true,true,true]
    , [105000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [112500,false,true,false,true,true,false,false,true,false,true,true,true,true,true,true,false,true,true,true]
    , [120000,false,true,true,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [127500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [135000,false,true,false,true,true,false,false,true,false,true,true,true,true,true,true,false,true,true,true]
    , [142500,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
    , [150000,false,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,true,true,true]
];

var oIntervals = [];

$.each(intervals, function(idx, elem){
    oIntervals.push(createInterval(elem));
});

return oIntervals;

}

function createInterval(props){
if(props.length == 20){
    return {
        'Miles': props[0]
        , 'Drain flush and refill cooling system' : props[1]
        , 'Lubricate chassis':props[2]
        , 'Replace automatic transaxle fluid and filter':props[3]
        , 'Replace engine air cleaner filter':props[4]
        , 'Replace engine oil':props[5]
        , 'Replace engine oil filter':props[6]
        , 'Replace spark plugs':props[7]
        , 'Rotate tires':props[8]
        , 'Inspect brake system':props[9]
        , 'Inspect drive axle boots':props[10]
        , 'Inspect engine accessory drive belt':props[11]
        , 'Inspect engine air cleaner filter':props[12]
        , 'Inspect engine cooling system hoses and clamps':props[13]
        , 'Inspect exhaust system':props[14]
        , 'Inspect fuel system':props[15]
        , 'Inspect spark plug wires':props[16]
        , 'Inspect steering system':props[17]
        , 'Inspect suspension system':props[18]
        , 'Inspect throttle system':props[19] 
    }
} 
return null;

}
0 голосов
/ 26 января 2011

Мне не известны какие-либо встроенные функции jQuery для этого случая, но это не должно быть слишком сложно для выполнения:

var arr = [];
$.each(yourobject, function(index, elem) {
    arr.push(elem);
});

JSON.stringify(arr);
0 голосов
/ 26 января 2011

Ассоциативные массивы не упорядочивают ключи, поэтому безопаснее обновить исходный массив другим ассоциативным массивом.

Вы можете легко обновить его с помощью простого цикла:

for (var i in new_array)
    old_array[i] = new_array[i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...