我有一个这样的数组:
var my_array= [
[2, [[9, 10]]],
[5, [[10, 11]]],
[4, [[11, 9]]],
[1, [[19, 2], [41, 10]]],
[7, [[17, 3]]],
[0, [[11, 4], [18, 5]]]
]
my_array
中的数组包含另外两个数组(第一个不是很必要,但是看看第二个(myarray[1]
:这个数组包括不同的x/y坐标[18, 4]
)。我希望得到的结果是另一个数组,它看起来像这样(下面有解释):
var result_array= [
[ [2, [9, 10]], [5, [10, 11]], [4, [11, 9]], [0, [11, 4]] ],
[ [1, [19, 2]], [0, [18, 5]] , [7, [17, 3]] ],
[ [1, [41, 10]] ]
]
数组现在按其x值排序([9, 10]
--> x值: 9
)并分组到新数组中。x值之间的差可以是,比如说,+/-2个索引(x值7,8,9,10,11)可以在一组中。
我不知道如何编写这个代码;这是我目前为止的内容:
var my_array= [
[2, [[9, 10]]],
[5, [[10, 11]]],
[4, [[11, 9]]],
[1, [[19, 2], [41, 10]]],
[7, [[17, 3]]],
[0, [[11, 4], [18, 5]]]
]
function sortArray(array) {
var difference = 2,
result = '';
var array_sorted = [];
array.forEach(function(a) {
a[1].forEach(function(b) {
array_sorted.push([b[0],b[1],a[0]]);
})
})
array_sorted = array_sorted.sort(function(a,b) {return a[0]-b[0]});
array_sorted.forEach(function(a) {
if (a[0] > difference) {
difference = a[0];
array_sorted.push(array_group); array_group = [];}
array_group.push([a]);
})
return array_sorted;
}
console.log(sortArray(my_array));
编辑: 我忘记提到一点,应该分组的坐标的y值差
不应超过1
。请看下面的例子:
(x: 3, y:1),(x: 1, y:2),(x: 2, y:3),(x: 4, y:4)
--> 不是 (x: 4, y:41)
编辑2:
var my_array= [
[2, [[9, 10]]],
[5, [[10, 11]]],
[4, [[11, 9]]],
[1, [[19, 2], [41, 10]]],
[7, [[17, 3]]],
[0, [[11, 4], [18, 5]]]
]
var result_array= [
[ [2, [9, 10]], [5, [10, 11]], [4, [11, 9]] ], // line 1
[ [0, [11, 4]] ], // line 2
[ [1, [19, 2]] ], // line 3
[ [7, [17, 3]] ], // line 4
[ [0, [18, 5]] ], // line 5
[ [1, [41, 10]] ] // line 6
]
如果您看一下第一行和第二行:x值(第二行:'11'和第一行:'9'、'10'、'9')完全匹配。现在我也想像上面编辑的示例一样分离y值。 --> 即使x值匹配,如果y值匹配,它们也应该被分成新的数组。
Y值匹配意味着存在类似于一行的内容 --> (x: 2, y:4),(x: 1, y:5), (x: 2, y:6), (x: 2, y:7),而不是像(x: 4, y:42)这样的值。
我希望我的编辑能让人更容易理解我的想法...
提前感谢,乔纳斯
return b[1][0] - b[1][0]
,在继续之前你需要解决它,我想。 - mplungjan[2, [[9, 10]]]
(第一个数组 --> xValue: 9) - Jonas0000