我正试图了解什么是关联数组,以及获取一个数组需要采取什么步骤。我已经看到了很多完全不同的解释。
我已经尝试过自己进行测试,但最终似乎无法真正得到它。
var array = ["one", "two", "three"];
var test = array["one"];
console.log(test);
我希望它以字符串“ one”所在的索引为目标,但是会发生错误。
答案 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对象是一个全局对象,用于构造数组。是高级的,类似于列表的对象。
Array
和Object
之间的主要区别在于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
为避免意外更改对象,您必须在执行对象操作之前创建该对象的新实例。有多种方法可以做到这一点:
let obj2 = {...obj};
Object.assign()
答案 1 :(得分:1)
我正试图了解什么是关联数组...
JavaScript没有关联数组,例如PHP。 JavaScript具有:
要查找数组中条目的索引,通常要使用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中使用Map
或Object
来实现。
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";