考虑一个长度始终为两个数字的乘积的数组。对于下面的数组,
同时还有一个给定的索引。我想要获取包含通过该特定索引的对角线上的元素的两个数组。
代码存在两个问题。结果中的两个数组都是相同的,并且它们不是有序的。
注意:我不想使用sort()来重新排序数组。同时我也不想遍历所有20个元素。只想获取那条对角线上的元素。
l
是4,w
是5
。同时还有一个给定的索引。我想要获取包含通过该特定索引的对角线上的元素的两个数组。
[
0, 1, 2, 3, 4
5, 6, 7, 8, 9
10, 11, 12, 13, 14
15, 16, 17, 18, 19
]
index = 7 => [3, 7, 11, 15] and [1, 7, 13, 19]
index = 16 => [4, 8, 12, 16] and [10, 16]
index = 0 => [0, 6, 12, 18] and [0]
我尝试了以下方法:
let arr = Array(20).fill().map((x,i) => i);
function getDias(arr, l, w, ind){
let arr1 = [];
let arr2 = [];
for(let i = 0;i<l;i++){
arr1.push(arr[ind + (i * w) + i])
arr1.push(arr[ind - (i * w) - i])
arr2.push(arr[ind + (i * w) + i])
arr2.push(arr[ind - (i * w) - i])
}
const remove = arr => [...new Set(arr.filter(x => x !== undefined))];
return [remove(arr1),remove(arr2)];
}
console.log(getDias(arr, 4, 5, 7))
注意:我不想使用sort()来重新排序数组。同时我也不想遍历所有20个元素。只想获取那条对角线上的元素。