gpt4 book ai didi

javascript - 重构复杂的嵌套数组

转载 作者:行者123 更新时间:2023-12-01 01:40:33 24 4
gpt4 key购买 nike

我有一个像这样的数组:

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
]

如果你看一下第 1 行和第 2 行:x 值(第 2 行:'11' 和第 1 行:'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)

我希望我的编辑能让人们更容易理解我的想法..

提前致谢,乔纳斯

最佳答案

编辑:格式和代码样式

编辑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 xdifference = 2;
var ydifference = 1;

function split(input_array) {
var splitted = [];

input_array.forEach(function (item) {
var coordinates = item[1];
coordinates.forEach(function (coordinate) {
splitted.push([item[0], coordinate]);
});
});
return splitted;
}

function getXValueOf(item) {
return item[1][0];
}

function getYValueOf(item) {
return item[1][1];
}

function divideIntoHeaps(sorted_array) {
var heaps = [];
function findMatchingHeap(item) {
var matching = heaps.find(function (heap) {
return heap.every(function (itemOfHeap) {
var xMatches = Math.abs(getXValueOf(item) - getXValueOf(itemOfHeap)) <= xdifference+1;
var yMatches = Math.abs(getYValueOf(item) - getYValueOf(itemOfHeap)) <= ydifference+1;
return xMatches && yMatches;
});
});
return matching;
}
function allocate(item) {
if (heaps.length == 0) {
heaps.push([item]);
} else {
var matchingHeap = findMatchingHeap(item);
if (matchingHeap !== undefined) {
matchingHeap.push(item);
} else {
heaps.push([item]);
}
}
}
sorted_array.forEach(allocate);
return heaps;
}

function sortArray(my_array) {
var splitted = split(my_array);
var result = divideIntoHeaps(splitted);
return result;
}

var result = sortArray(my_array);
result.forEach( function (row) {
console.log(JSON.stringify(row));
});
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 重构复杂的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com