如何通过用户输入在数组中查找值

时间:2018-11-12 04:18:49

标签: javascript html arrays

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]以便交换值,还是有一种更简单的方法?

对不起,如果我的提问格式不正确。

2 个答案:

答案 0 :(得分:2)

假设输入为字符串'x1''x2'),则需要一种方法来表示数据结构中的变量名。一种方法是拥有一个包含labelvalue属性的对象数组,而不是字符串数组。然后,只需找到两个输入的两个标签的索引,然后重新分配这些索引即可。

此外,最好不要分配给名为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']);