2013-02-08 1 views
0

Мне нужен простой способ разделить все числа (содержащиеся в объектах) в массиве с помощью переменной в JavaScript (без JQuery или других библиотек):Как вы делите каждое число в массиве на переменную в javascript?

var divisor = 16; 
var array = [{"x":0,"y":16},{"x":16,"y":32},{"x":32,"y":48}]; 

Ожидаемый результат:

[{"x":0,"y":1},{"x":1,"y":2},{"x":2,"y":3}]; 

Есть идеи ?

+0

Почему вы добавления строки внутри каждого элемента? Также обратите внимание на циклы 'for'. – David

+0

Являются ли эти объекты всегда структурой '{x: 1, z: 2}'? –

+3

Jeezus, так много людей хотят сделать чью-то домашнюю работу. [Что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) – freakish

ответ

4

Это должно сделать это для вас:

var divisor = 16; 
var array = [{"x":0,"y":16},{"x":16,"y":32},{"x":32,"y":48}]; 

for(var i = 0, length = array.length; i < length; i++){ 
    array[i] = {'x':array[i].x/divisor,'y':array[i].y/divisor}; 
} 

В случае, если вы, вероятно, расширить объекты в будущем, вы можете сделать это, как это, вместо того, чтобы:

for(var i = 0, length = array.length; i < length; i++){ 
    array[i].x /= divisor; // `a[i].x /= d` is shorthand for `a[i].x = a[i].x/d` 
    array[i].y /= divisor; 
} 

Этот имеет то преимущество, что он не перезаписывает array[i], сохраняя возможные другие свойства.

+0

Отлично! Благодарю. – Julian

+0

Это может быть проблемой в будущем, если словари получат больше ключей, например * скорость * или что-то в этом роде. Suddendly они удаляются с кодом. –

+0

@ GeorgSchölly: это выходит за рамки вопроса, imo, но я отредактировал в другом варианте. Если ваш downvote ваш, вы могли бы рассмотреть его удаление? – Cerbrus

0

Попробуйте

 var divisor = 16; 
     var array = [{"x":0,"y":16},{"x":16,"y":32},{"x":32,"y":48}]; 
     var i=0; 
     for(i=0;i<array.length;i++) 
     { 
      array[i]["y"]=array[i]["y"]/divisor; 
      array[i]["x"]=array[i]["x"]/divisor; 
     } 
+0

Вы забыли о 'array [i] [" x "]' – Cerbrus

+0

@Cerbrus thnks :) – iJade

1

Другое решение, с помощью map и обратного вызова:

var divisor = 16; 
var array = [{"x":0,"y":16},{"x":16,"y":32},{"x":32,"y":48}]; 

array = array.map(function(v){ 
    return {x: v.x/divisor, y: v.y/divisor}; 
}); 
+0

Имейте в виду, что [Array.prototype.map() - IE9 +] (https://developer.mozilla.org/ ru-US/docs/JavaScript/Reference/Global_Objects/Array/map # Browser_compatibility) – Cerbrus

+0

Вы должны либо использовать метод 'forEach', либо не изменять' v'. Он работает в этом примере, но «карта» не должна изменять исходные объекты. –

+0

@Cerbrus: также доступен во всех других современных браузерах и прост в использовании для старых. –

2
for (var i = 0; i < array.length; i++) { 
    array[i]["x"] /= divisor; 
    array[i]["y"] /= divisor; 
} 
1

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

function divideArray(array, divisor) { 
    var i = array.length, a, k; 
    while (i) { // loop over each item in array 
     a = array[--i]; 
     for (k in a) { // loop over each key in object 
      if (a.hasOwnProperty(k)) { // ignore inherited keys 
       a[k] = a[k]/divisor; // calculate 
      } 
     } 
    } 
    return array; 
} 

// use with your example 
var divisor = 16; 
var array = [{"x":0,"y":16},{"x":16,"y":32},{"x":32,"y":48}]; 
array = divideArray(array, divisor); 
2

Глубокое разделение здесь.

var divideBy = function(object, divider) { 
    if (typeof(object) == 'number') return object/divider; 
    for (var i in object) { 
     if (object.hasOwnProperty(i)) { 
      object[i] = divideBy(object[i], divider); 
     } 
    } 
    return object; 
} 

var obj = [{a: 16, b: 32}, {c: 0, d: 48, e: 160}]; 
console.log(divideBy(obj, 16)); 
0
var divisor = 16; 
    var array = [{"x":0,"y":16},{"x":16,"y":32},{"x":32,"y":48}]; 
    var i=0; 
    for(i=0;i<array.length;i++) 
    { 
     array[i]["y"]=array[i]["y"]/divisor; 
     array[i]["x"]=array[i]["x"]/divisor; 
    } 
+2

Не могли бы вы [изменить] и уточнить свой ответ о том, почему OP или другие люди могут попробовать это? – Shashanth

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