我有这个数组
0: (5) ["2", "X", "8", "11", "15"]
1: (5) ["1", "5", "X", "X", "14"]
2: (5) ["X", "4", "7", "10", "13"]
3: (5) ["X", "3", "6", "9", "12"]
我想将数字1移动到数字2所在的位置,以便此数组返回
0: (5) ["1", "X", "8", "11", "15"]
1: (5) ["2", "5", "X", "X", "14"]
2: (5) ["X", "4", "7", "10", "13"]
3: (5) ["X", "3", "6", "9", "12"]
此数组集合立即全部返回,因此一旦返回,我想更改位置。
我正在使用JavaScript。 谢谢大家。
我尝试了
Array.prototype.move = function (from, to) {
this.splice(to, 0, this.splice(from, 1)[0]);
};
但这将整个行彼此移动,即将数组0移动到数组1
答案 0 :(得分:2)
找到两者的外部数组索引和内部数组索引,然后切换它们:
const input = [
["2", "X", "8", "11", "15"] ,
["1", "5", "X", "X", "14"],
["X", "4", "7", "10", "13"],
["X", "3", "6", "9", "12"]
];
const getLoc = char => {
const arrIndex = input.findIndex(subarr => subarr.includes(char));
const subArrIndex = input[arrIndex].indexOf(char);
return [arrIndex, subArrIndex];
};
const move = (char1, char2) => {
const [loc1, loc2] = [char1, char2].map(getLoc);
[
// switch position of first character:
input[loc1[0]][loc1[1]],
// and position of second character:
input[loc2[0]][loc2[1]]
] = [
// with position of second character:
input[loc2[0]][loc2[1]],
// and the first character:
input[loc1[0]][loc1[1]]
];
};
move('2', '1');
console.log(input);
答案 1 :(得分:0)
您可以使用findIndex
从各自的数组中找到2
和1
的第一个索引,然后将其替换。否则,如果您只想替换特定索引处的元素,则可以直接定位数组和索引并替换它
let data = [
["2", "X", "8", "11", "15"],
["1", "5", "X", "X", "14"]
];
let find2In1 = data[0].findIndex(item => item === "2");
let find1In2 = data[1].findIndex(item => item === "1");
data[0][find2In1] = "1";
data[1][find1In2] = "2";
console.log(data)
答案 2 :(得分:0)
从样本来看,您似乎需要交替使用1和2。
输入
0:(5) ["1", "X", "8", "11", "15"]
1: (5) ["2", "5", "X", "X", "14"]
2: (5) ["X", "4", "7", "10", "13"]
3: (5) ["X", "3", "6", "9", "12"]
输出
a.forEach((item) => {
if (item === "1")
item = "2"
else
if (item === "2")
item = "1"
})
您可以搜索每个数组,并使用forEach进行搜索。
State
答案 3 :(得分:0)
从数组中读取值或将值写入数组时,需要进行两步查找:首先找到外部数组索引,然后找到所需值的内部数组索引。要为数组中的"foo"
分配一个不同的值"14"
,您可以这样做:
array[1][4] = "foo";
我们可以将二维数组称为矩阵。让我们稍微对齐一下数组,然后将值的“外部索引”称为row
,将值的“内部索引”称为col
(对于列)。
const myMatrix = [
// 0 1 2 3 4 <-- columns
["2", "X", "8", "11", "15"], // 0
["1", "5", "X", "X", "14"], // 1
["X", "4", "7", "10", "13"], // 2
["X", "3", "6", "9", "12"], // 3
];
// ^
// |
// rows
值"2"
分别位于row = 0
和col = 0
处,并且
值"1"
位于row = 1
和col = 0
我们将一组行和列索引称为一个向量,这样
[0, 0]
成为"2"
中myMatrix
的向量,同样
[1, 0]
成为"1"
中的myMatrix
的向量
我们需要一个辅助函数,该函数需要一个矩阵和一个值,并告诉我们该值在矩阵内的向量:
function vector(matrix, value) {
const row = matrix.findIndex((row) => row.includes(value));
const col = matrix[row].findIndex((v) => v === value);
return [row, col];
}
最后,我们需要实际切换矩阵中值的函数。
function switchVectorValues(matrix, valueA, valueB) {
const [rowA, colA] = vector(matrix, valueA);
const [rowB, colB] = vector(matrix, valueB);
matrix[rowA][colA] = valueB;
matrix[rowB][colB] = valueA;
return matrix;
}
将所有这些放在一起,我们得到以下工作示例:
function vector(matrix, value) {
const row = matrix.findIndex((row) => row.includes(value));
const col = matrix[row].findIndex((v) => v === value);
return [row, col];
}
function switchVectorValues(matrix, valueA, valueB) {
// Todo: validate input. `matrix` must be a 2D array for example,
// otherwise `vector()` is going to break things
const [rowA, colA] = vector(matrix, valueA);
const [rowB, colB] = vector(matrix, valueB);
matrix[rowA][colA] = valueB;
matrix[rowB][colB] = valueA;
return matrix;
}
const myMatrix = [
["2", "X", "8", "11", "15"],
["1", "5", "X", "X", "14"],
["X", "4", "7", "10", "13"],
["X", "3", "6", "9", "12"],
];
console.log(
switchVectorValues(myMatrix, "1", "2")
)