2012-04-03 6 views
0

Я немного запутался в создании массива. У меня есть список элементов с й: у совместно ординаты, а также их размеры (в размерах сетки) ... например:Создание массива сетки координат

x: 1 
y: 7 
width: 2 tiles 
height: 2 tiles 

Так что идея им пытается сделать, это создать массив х: у сеток которые «заняты». Но зацикливание таких данных так оккупированная плитка бы там быть:

x: 1 
y: 7 
// 
x: 2 
y: 7 
// 
x: 1 
y: 8 
// 
x: 2 
y: 8 

Поскольку в приведенном выше примере элемент 2 по 2 плитке (квадрат).

Мой объект структурировано, как это (показано на console.log (SDATA))

7: Array[4] 
0: "1" 
1: "7" 
2: "2" 
3: "2" 

Так что да им пытаются создать массив для хранения такого рода сетки reference..Hope Я объяснил, что я пытаясь получить, но я не могу понять, как структурировать цикл для создания массива.

+0

Что вы сделали? – Alexander

+0

«Структура объекта» в вашем последнем блоке кода не имеет никакого смысла. Почему строки чисел? Что свойства левой руки имеют отношение к значениям правой руки? Почему 7 массив? – mikerobi

+0

Взгляните на это. Это может помочь: http://stackoverflow.com/questions/2529865/javascript-multidimensional-array –

ответ

1

http://jsfiddle.net/rlemon/JeeV2/ Вот пример того, как вы могли бы производить этот тип данные «сетки».

var chords = [ // instead of arrays we'll use objects.. they're nicer. 
    { 
    x: 1, 
    y: 7, 
    h: 2, // height 
    w: 2}, // width 
{ // ohh look a second plot point. 
    x: 4, 
    y: 1, 
    h: 3, 
    w: 2}, 
]; 

var occupied = { // will be your cells points occupied 
    x: [], 
    y: []  
}; 
chords.forEach(function(chord) { // now lets loop the chords and produce the occupied array 
    occupied.x.push(chord.x); 
    occupied.x.push(chord.x + (chord.w-1)); // expand the width of the cell - initial point 
    occupied.y.push(chord.y); 
    occupied.y.push(chord.y + (chord.h-1)); // expand the height of the cell - initial point 
}); 
console.log(occupied); 
// outputs 
​Object 
    x: Array[4] 
     0: 1 
     1: 2 
     2: 4 
     3: 5 

    y: Array[4] 
     0: 7 
     1: 8 
     2: 1 
     3: 3 
+0

Если бы я хотел знать, был ли занят y: ​​8, как бы я мог проверить, потому что я не мог знать, что это было в позиции массива [1]? – Sir

+0

уверен ... 'if busy.y.indexOf (8)' http://jsfiddle.net/rlemon/JeeV2/1/ – rlemon

1

Результирующий массив outputArray представляет собой набор объектов в форме { x: value, y: value}.

var inputArray = [ [1,7,2,2], ... ]; 
var outputArray = []; 
for(var i = 0; i < inputArray.length; i++) { 
    var item = { 
     x: inputArray[i][0], 
     y: inputArray[i][1], 
     width: inputArray[i][2], 
     height: inputArray[i][3] 
    }; 
    for(var xx = 0; xx < item.width; xx++) { 
     for(var yy = 0; yy < item.height; yy++) {   
      outputArray.push({ 
       x: item.x + xx, 
       y: item.y + yy 
      }); 
     } 
    } 
} 

Я добавил x, y, width и height атрибуты, чтобы сделать его более понятным.

0
function range(a, b) { 
    /* 
     range(5) -> [0,1,2,3,4] 
     range(1,4) -> [1,2,3] 
    */ 
    if (b===undefined) 
     var start=0, stop=a; 
    else 
     var start=a, stop=b; 

    var R = []; 
    for(var i=start; i<stop; i++) 
     R.push(i); 
    return R; 
} 

Тогда это два лайнера:

range(x, x+width).map(function(x) { 
    return range(y, y+height).map(function(y) { 
     return {x:x, y:y}; // anything you'd like 
    }) 
}) 

Результат (полученный с помощью JSON.stringify):

[ 
    [ {"x":1,"y":7}, {"x":1,"y":8} ], 
    [ {"x":2,"y":7}, {"x":2,"y":8} ] 
] 
Смежные вопросы