什么是关联数组?

时间:2019-05-21 14:51:37

标签: javascript arrays split query-string

我正试图了解什么是关联数组,以及获取一个数组需要采取什么步骤。我已经看到了很多完全不同的解释。

我已经尝试过自己进行测试,但最终似乎无法真正得到它。

var array = ["one", "two", "three"];
var test = array["one"];
console.log(test);

我希望它以字符串“ one”所在的索引为目标,但是会发生错误。

8 个答案:

答案 0 :(得分:2)

您可能正在寻找一个JavaScript对象,该对象与关联数组,字典或其他语言的映射基本上相同:它将字符串映射为值。与Array使用方括号[]进行声明不同,对象使用花括号{}请注意,有一些例外情况)。

尝试将Object视为关联数组:

const arr = {one: 1, two: 2, three: 3};
console.log(arr['one']);
console.log(arr.one);

值得注意的是,JavaScript中的Array实际上是对象。

  

JavaScript Array对象是一个全局对象,用于构造数组。是高级的,类似于列表的对象。

ArrayObject之间的主要区别在于Array被数字索引。

const arr = ['fooValue', 'barValue'];
const obj = {foo: 'fooValue', bar: 'barValue'};

console.log('arr: ', arr[0], arr[1]);
console.log('obj: ', obj.foo,  obj.bar);

值得注意的是,与JavaScript中的原始类型不同,Object(和Array,也都是Object)是通过引用传递的,因此额外尝试复制对象时需要小心。

function test(obj) {
  obj['oops'] = 'this will modify the object';
}

const obj = {one: 1, two: 2, three: 3};
test(obj);
console.log(obj); // Object was updated

为避免意外更改对象,您必须在执行对象操作之前创建该对象的新实例。有多种方法可以做到这一点:

答案 1 :(得分:1)

  

我正试图了解什么是关联数组...

JavaScript没有关联数组,例如PHP。 JavaScript具有:

  • (有效地)被数字索引的数组(请参阅my blog post,以了解为什么我说“有效”)
  • 对象,是具有名称的属性的集合,这些名称可以是字符串或符号(并且具有其他功能,例如继承)
  • 地图,是键/值对的集合,其中键可以是任何类型(不仅仅是字符串或符号)

数组

要查找数组中条目的索引,通常要使用indexOf(用于===匹配)或findIndex(如果要提供谓词函数)。

var array = ["one", "two", "three"];
console.log(array.indexOf("one")); // 0

对象

如果需要,可以创建一个将字符串映射到数字的对象:

var obj = {"one": 1, "two": 2, "forty-two": 42};
console.log(obj["forty-two"]); // 42

地图

类似地,地图可以做到这一点:

var map = new Map([
    ["one", 1],
    ["two", 2],
    ["forty-two", 42]
]);
console.log(map.get("forty-two")); // 42

答案 2 :(得分:1)

关联数组用于关联整个数组中的某些内容。 您可以将其与查询字符串一起使用,例如:

为了从提交的论坛中获取信息,您需要将用户数据放入关联数组中。

您首先需要获取查询字符串,如下所示:

var queryString = window.location.search;
queryString = queryString.substring(1);

我之所以这样做substring(1)是因为我们可以删除'?'一开始。

一旦有了网站的查询字符串,就需要一个循环来分隔接收到的数据的值:

while (queryString.indexOf("+") != -1)
    queryString = queryString("+", " ");

这会将字符串中的所有“ +”符号替换为空格,从而使您获得的值不含“ +”符号。例如,您将使用“ Name = John”。

现在,我们需要从字符串中拆分'&'。 我们还需要为用户数据准备一个数组。

var array = queryString.split("&");
var userData = [];

然后,进行一个for循环,以针对已提交的数据量为目标,并在将其存储到数组时逐个获取:

for (let x = 0; x < array.length; x++) 
{
    var equalSign = array[x].search("=");
    var theKeyValue = array[x].substring(0, equal);
    var userDataValue = array[x];
    userDataValue = decodeURIComponent(userDataValue); //Puts symbols back
    userData[theKeyValue] = userDataValue;
}

这只是后续使用关联数组的示例,希望对您有所帮助。 :)

答案 3 :(得分:0)

关联数组是一种数据结构,一个数据集合,其范围是将键列表与各个值(键:值)相关联。

您可以在维基百科here中阅读,它们是关联数组的示例,例如:地图,字典等。

关联数组的示例也是PHP索引数组,例如:

$cars[0] = "Volvo"; 
$cars[1] = "BMW";
$cars[2] = "Toyota";

答案 4 :(得分:0)

请参见Wikipedia

当您可以通过键查找值时,它是一种数据结构。通常在JS中使用MapObject来实现。

const data = new Map([
    ['foo', 'one'],
    ['bar', 'two']
]);

console.log( data.get("bar") );


  

我希望它以字符串“ one”所在的索引为目标,但是会发生错误。

您试图通过属性值在数组中查找索引。

与关联数组无关,可以通过indexOf方法来实现。

var array = ["one", "two", "three"];
var test = array.indexOf("one");
console.log(test);

答案 5 :(得分:0)

一个关联数组,本质上是一个哈希表或一个关联关系的数组。

例如,如果我要为水果建立一个关联数组,可以说它的价格。

const arr = {'apple': 1, 'orange': 2, 'pear': 3};

console.log(Object.keys(arr));
console.log(Object.values(arr));

答案 6 :(得分:0)

与其他语言不同,Javascript中的数组不受数字索引的限制。它们也可以充当哈希(即以字符串作为键)。关联数组是将键设置为非数字值的数组。

默认情况下,在您提供的示例中,升序数值被分配给数组的每个成员。即

var array = ["one", "two", "three"];

等同于

var array = [];
array[0] = 'one';
array[1] = 'two';
array[2] = 'three';

关联数组将是在其中分配数字值而不是数字值的地方:

var array = [];
array['one'] = 'one';
array['two'] = 'two';

但是,这本身带来了一些警告,并且认为这是不好的做法,并且阵列变得更难管理。在这种情况下,最好使用对象或Map

答案 7 :(得分:-1)

这不是一个关联数组,而是一个普通文本数组,填充了文本。

一个关联数组示例(您也可以使用对象语法,例如Miroslav的答案):

var stuff = [];
stuff['one'] = "hello 1";
stuff['two'] = "hello 2";