var x1 ='&spades',
y1 ='&clubs'
z1 ='&hearts';
var x2 = ' ', y2 = ' ', z2 = ' ';
var x3 = ' ', y3 = ' ', z3 = ' ';
var Array = [x1,y1,z1,
x2,y2,z2,
x3,y3,z3];
然后,我从用户那里得到输入,要求他们选择一个位置(例如x1
),将其存储为输入1,然后询问他们另一个位置(例如x2
)并存储该位置作为输入2,我必须交换值的位置。
我最初尝试过类似Array[input1] = Array[input2]
但是即使Array[input1]
仍未定义input1 = x1
,因为Array[x1]
仍未定义。
那么我该如何制作Array[x1] = Array[0]
以便交换值,还是有一种更简单的方法?
对不起,如果我的提问格式不正确。
答案 0 :(得分:2)
假设输入为字符串('x1'
和'x2'
),则需要一种方法来表示数据结构中的变量名。一种方法是拥有一个包含label
和value
属性的对象数组,而不是字符串数组。然后,只需找到两个输入的两个标签的索引,然后重新分配这些索引即可。
此外,最好不要分配给名为Array
的变量,因为这会遮盖全局Array
对象-改用其他名称,例如{{1} }:
arr
最后的销毁线允许一次在两个位置交换变量,而不必求助于中间变量:
const arr = [
{ label: 'x1', value: '&spades' },
{ label: 'y1', value: '&clubs' },
{ label: 'z1', value: '&hearts' }
// ...
];
// Inputs:
const label1 = 'x1';
const label2 = 'y1';
// Calculate indicies:
const [index1, index2] = [label1, label2].map(
findLabel => arr.findIndex(({ label }) => label === findLabel)
);
([arr[index1], arr[index2]] = [arr[index2], arr[index1]]);
console.log(arr);
如果您感到困惑,可以选择使用中间变量:
([arr[index1], arr[index2]] = [arr[index2], arr[index1]]);
答案 1 :(得分:0)
这是使用对象时代码的外观:
let arr = {};
arr['x1'] = '&spades';
arr['y1'] = '&clubs';
arr['z1'] = '&hearts';
arr['x2'] = ' ';
arr['y2'] = ' ';
arr['z2'] = ' ';
arr['x3'] = ' ';
arr['y3'] = ' ';
arr['z3'] = ' ';
console.log(arr['z1']);
arr['z1'] = 'foo';
console.log(arr['z1']);