2013-02-08 35 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 2013-02-08 15:33:12

+0

這些對象始終是結構體「{x:1,z:2}」嗎? – 2013-02-08 15:33:51

+3

Jeezus,很多人都渴望做某人的功課。 [你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – freakish 2013-02-08 15:38:22

回答

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 2013-02-08 15:40:05

+0

如果字典獲得更多的關鍵字,如*速度*或其他東西,這可能會成爲未來的問題。 Suddendly他們被刪除與您的代碼。 – 2013-02-08 15:43:44

+0

@GeorgSchölly:這不在問題的範圍內,但我已經編輯了另一個選項。如果downvote是你的,你能否考慮刪除它? – Cerbrus 2013-02-08 15:47:43

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 2013-02-08 15:37:21

+0

@Cerbrus thnks :) – iJade 2013-02-08 15:38:55

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/ en-US/docs/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility) – Cerbrus 2013-02-08 15:38:15

+0

您應該使用'forEach'方法或不要修改'v'。它在這個例子中起作用,但'map'不應該修改原始對象。 – 2013-02-08 15:42:21

+0

@Cerbrus:在所有其他現代瀏覽器中也可用,並且易於爲舊版瀏覽器提供填充。 – 2013-02-08 15:50:30

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

這是作爲一個功能,使您可以重新使用它。它不限於每個對象只有2個變量。

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 2017-08-16 14:45:25

相關問題