gpt4 book ai didi

javascript - 如何在表示矩形的数组中获取与某个索引成对 Angular 线的元素

转载 作者:数据小太阳 更新时间:2023-10-29 06:14:01 28 4
gpt4 key购买 nike

考虑一个数组,其长度总是两个数字的乘积。对于下面的数组,l 是 4,w5

还有一个给定的索引。我想获得两个数组,其中包含位于穿过该特定索引的对 Angular 线上的元素。

[
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 个元素。只想获取那个对 Angular 线行的元素

最佳答案

一些数学(即模数、整数除法和最小值)可以找到从左到右 (LTR) 和从右到左 (RTL) 运行的对 Angular 线的起始行和列,从而节省复杂性向后迭代以找到起点。然后,使用那些开始的行和列,简单地迭代直到超出数组的高度和宽度范围。

let arr = Array(20).fill().map((x, i) => i);

function diagonals(arr, h, w, n) {
var nRow = Math.floor(n / w);
var nCol = n % w;

let LTR = [];
for (let r = nRow - Math.min(nRow, nCol), c = nCol - Math.min(nRow, nCol); r < h && c < w; r++, c++) LTR.push(arr[r * w + c]);

let RTL = [];
for (let r = nRow - Math.min(nRow, w - nCol - 1), c = nCol + Math.min(nRow, w - nCol - 1); r < h && 0 <= c; r++, c--) RTL.push(arr[r * w + c]);

return [LTR, RTL];
}

样本运行...

diagonals(arr, 4, 5, 7);  // returns ==> [[1, 7, 13, 19], [3, 7, 11, 15]]
diagonals(arr, 4, 5, 15); // returns ==> [[15], [3, 7, 11, 15]]

编辑:关于 arr 值与索引的注释。

此外,只是澄清一点。问题表明“还有一个给定的索引。我想得到两个数组,其中包含位于通过该特定索引的对 Angular 线上的元素。”如果要查找的是矩形数组的索引而不是 arr 的实际值,则无需构建 arr 和随后的 functionpush 语句可以改为...

  • 函数对 Angular 线(h, w, n)
  • LTR.push(r * w + c)
  • RTL.push(r * w + c)

关于javascript - 如何在表示矩形的数组中获取与某个索引成对 Angular 线的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815012/

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