我需要一個簡單的方式通過一個變量以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}];
有任何想法嗎 ?
我需要一個簡單的方式通過一個變量以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}];
有任何想法嗎 ?
這應該爲你做它:
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]
的優點,節省了可能的其他屬性。
試試這個
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;
}
另一種解決方案,使用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};
});
請記住,[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
您應該使用'forEach'方法或不要修改'v'。它在這個例子中起作用,但'map'不應該修改原始對象。 – 2013-02-08 15:42:21
@Cerbrus:在所有其他現代瀏覽器中也可用,並且易於爲舊版瀏覽器提供填充。 – 2013-02-08 15:50:30
for (var i = 0; i < array.length; i++) {
array[i]["x"] /= divisor;
array[i]["y"] /= divisor;
}
這是作爲一個功能,使您可以重新使用它。它不限於每個對象只有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);
這裏深陷。
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));
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;
}
您能否請[編輯]並闡述您的答案,爲什麼OP或其他人可以嘗試這個? – Shashanth 2017-08-16 14:45:25
你爲什麼每個元素中添加字符串?另外,查看'for'循環。 – David 2013-02-08 15:33:12
這些對象始終是結構體「{x:1,z:2}」嗎? – 2013-02-08 15:33:51
Jeezus,很多人都渴望做某人的功課。 [你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – freakish 2013-02-08 15:38:22