javascript中(多维)数组中的反向项
我正在使用传单JS在OpenStretchMap上显示一些多边形 我有一个外部数据源,它给我多边形的坐标。不幸的是,这个数组的坐标顺序错误 例如: 我得到: [10.5254913,52.2734311],[10.5258872,52.2734632]] 我需要: [52.2734311,10.5254913],[52.2734632,10.5258872]] 所以我自己编写了一个小函数,它遍历数组并反转条目:javascript中(多维)数组中的反向项,javascript,multidimensional-array,openstreetmap,reverse,leaflet,Javascript,Multidimensional Array,Openstreetmap,Reverse,Leaflet,我正在使用传单JS在OpenStretchMap上显示一些多边形 我有一个外部数据源,它给我多边形的坐标。不幸的是,这个数组的坐标顺序错误 例如: 我得到: [10.5254913,52.2734311],[10.5258872,52.2734632]] 我需要: [52.2734311,10.5254913],[52.2734632,10.5258872]] 所以我自己编写了一个小函数,它遍历数组并反转条目: var polCoords = []; $.each(value.polygon[0
var polCoords = [];
$.each(value.polygon[0], function(key,value){
polCoords[key] = [value[1],value[0]];
});
这个很好用。但是现在我发现一些多边形的数组是多维的!我有一个这样的数组:
[[[10.5261828,52.2726556],[10.5263222,52.2726767],[10.5263578,52.2726821],[10.5263637,52.2726677],[10.5263738,52.2726428],[10.5264042,52.2725678],[10.526186,52.2725346],[10.5261395,52.272649],[10.5261828,52.2726556]],[[10.5261828,52.2726556],[10.5261713,52.2726821],[10.5261621,52.2727047],[10.5259248,52.2726687],[10.5257879,52.2726479],[10.5257435,52.2727573],[10.5258014,52.2727661],[10.5257967,52.2727777],[10.5260173,52.2728113],[10.5261107,52.2728254],[10.5260641,52.2729403],[10.5259711,52.2729262],[10.5259526,52.2729234],[10.5258101,52.2732746],[10.5258697,52.2732837],[10.5260636,52.2733132],[10.5261371,52.2733243],[10.5262746,52.2729854],[10.5262888,52.2729876],[10.526312,52.2729304],[10.5262636,52.2729231],[10.5262239,52.272917],[10.5263222,52.2726767],[10.5261828,52.2726556]],[[10.5260636,52.2733132],[10.5260595,52.2733365],[10.5260575,52.2733486],[10.5258607,52.2733326],[10.5258631,52.2733195],[10.5258697,52.2732837],[10.5260636,52.2733132]]]
它似乎由多个多边形组成
如何反转此多维数组的每个条目?假设
数组
是您的数据,请尝试以下操作:
var reversed = array.map(function reverse(item) {
return Array.isArray(item) && Array.isArray(item[0])
? item.map(reverse)
: item.reverse();
});
var reversed = $.map(array, function reverse(item) {
return $.isArray(item) && $.isArray(item[0])
? $.map(item, reverse)
: item.reverse();
});
这是香草JavaScript。我认为在jquery中应该是这样的:
var reversed = array.map(function reverse(item) {
return Array.isArray(item) && Array.isArray(item[0])
? item.map(reverse)
: item.reverse();
});
var reversed = $.map(array, function reverse(item) {
return $.isArray(item) && $.isArray(item[0])
? $.map(item, reverse)
: item.reverse();
});
我没有试过,但他们两个都可以。让我知道。
<script type="text/javascript">
//given array
var arr = [
[
[10.5261828, 52.2726556],
[10.5263222, 52.2726767],
[10.5263578, 52.2726821],
[10.5263637, 52.2726677],
[10.5263738, 52.2726428],
[10.5264042, 52.2725678],
[10.526186, 52.2725346],
[10.5261395, 52.272649],
[10.5261828, 52.2726556]
],
[
[10.5261828, 52.2726556],
[10.5261713, 52.2726821],
[10.5261621, 52.2727047],
[10.5259248, 52.2726687],
[10.5257879, 52.2726479],
[10.5257435, 52.2727573],
[10.5258014, 52.2727661],
[10.5257967, 52.2727777],
[10.5260173, 52.2728113],
[10.5261107, 52.2728254],
[10.5260641, 52.2729403],
[10.5259711, 52.2729262],
[10.5259526, 52.2729234],
[10.5258101, 52.2732746],
[10.5258697, 52.2732837],
[10.5260636, 52.2733132],
[10.5261371, 52.2733243],
[10.5262746, 52.2729854],
[10.5262888, 52.2729876],
[10.526312, 52.2729304],
[10.5262636, 52.2729231],
[10.5262239, 52.272917],
[10.5263222, 52.2726767],
[10.5261828, 52.2726556]
],
[
[10.5260636, 52.2733132],
[10.5260595, 52.2733365],
[10.5260575, 52.2733486],
[10.5258607, 52.2733326],
[10.5258631, 52.2733195],
[10.5258697, 52.2732837],
[10.5260636, 52.2733132]
]
];
var arrModified = new Array();
var intDepth = 0;
//array depth calculation
function arrayDepth(arr) {
for(item in arr) {
if (Object.prototype.toString.call(arr) === '[object Array]') {
intDepth++;
arrayDepth(item);
}
}
}
arrayDepth(arr);
//for depth 1
if (intDepth == 1) {
arrModified = arr.reverse();
}
//for depth 2
if (intDepth == 2) {
for (item in arr) {
arrModified[item] = arr[item].reverse();
}
}
//for depth 3
if (intDepth == 3) {
for (i in arr) {
var arrTemp = arr[i];
var arrTemp1 = new Array();
for (j in arrTemp) {
arrTemp1[j] = arrTemp[j].reverse();
}
arrModified[i] = arrTemp1;
}
}
//so on for other depths
//arrModified is the required array
</script>
//给定数组
var arr=[
[
[10.5261828, 52.2726556],
[10.5263222, 52.2726767],
[10.5263578, 52.2726821],
[10.5263637, 52.2726677],
[10.5263738, 52.2726428],
[10.5264042, 52.2725678],
[10.526186, 52.2725346],
[10.5261395, 52.272649],
[10.5261828, 52.2726556]
],
[
[10.5261828, 52.2726556],
[10.5261713, 52.2726821],
[10.5261621, 52.2727047],
[10.5259248, 52.2726687],
[10.5257879, 52.2726479],
[10.5257435, 52.2727573],
[10.5258014, 52.2727661],
[10.5257967, 52.2727777],
[10.5260173, 52.2728113],
[10.5261107, 52.2728254],
[10.5260641, 52.2729403],
[10.5259711, 52.2729262],
[10.5259526, 52.2729234],
[10.5258101, 52.2732746],
[10.5258697, 52.2732837],
[10.5260636, 52.2733132],
[10.5261371, 52.2733243],
[10.5262746, 52.2729854],
[10.5262888, 52.2729876],
[10.526312, 52.2729304],
[10.5262636, 52.2729231],
[10.5262239, 52.272917],
[10.5263222, 52.2726767],
[10.5261828, 52.2726556]
],
[
[10.5260636, 52.2733132],
[10.5260595, 52.2733365],
[10.5260575, 52.2733486],
[10.5258607, 52.2733326],
[10.5258631, 52.2733195],
[10.5258697, 52.2732837],
[10.5260636, 52.2733132]
]
];
var arrrmodified=新数组();
var-intDepth=0;
//阵列深度计算
函数arrayDepth(arr){
用于(arr中的项目){
if(Object.prototype.toString.call(arr)='[Object Array]'){
intDepth++;
阵列深度(项目);
}
}
}
arrayDepth(arr);
//深度1
如果(intDepth==1){
arrModified=arr.reverse();
}
//深度2
if(intDepth==2){
用于(arr中的项目){
arrModified[item]=arr[item].reverse();
}
}
//深度3
if(intDepth==3){
对于(我在arr中){
var arrTemp=arr[i];
var arrTemp1=新数组();
用于(ARRTEM中的j){
arrTemp1[j]=arrTemp[j]。反向();
}
arrModified[i]=arrTemp1;
}
}
//其他深度也是如此
//这是所需的数组
注意:此方法将更改原始数组
香草javaScript也应该可以工作。不需要jQuery。我正在测试这个,但是我得到了“UncaughtTypeError:Cannotreadproperty'length'of undefined”,我为我的问题找到了一个解决方案,但它不是这个问题的答案。以防其他人遇到同样的问题:我现在在传单中使用geoJSON,它以我接收gps坐标的方式接受gps坐标。我没有用您编写的数据测试jQuery坐标,而是普通的坐标,它工作了——而且,那里没有访问
长度的权限,所以不可能是那个代码。不管怎样,很高兴你用另一种方式解决了。硬编码的深度级别?为什么不使用递归函数呢?