在JavaScript中,数组是一种特殊类型的对象,其键(key)通常是数字索引,而值(value)可以是任意数据类型。然而,如果你尝试使用非数字的键来存储值,JavaScript会将其视为对象的属性而不是数组的元素。
如果你尝试在数组中使用重复的非数字键来存储值,实际上你是在创建一个对象的属性,而不是数组的元素。这可能导致预期之外的行为,因为数组的长度不会增加,而且你无法通过索引访问这些值。
JavaScript数组的索引必须是唯一的整数,而对象的属性可以有重复的键(如果键是字符串)。
如果你需要存储具有重复键的数据,应该使用对象而不是数组。如果你需要保持数组的特性,可以考虑以下方法:
Map
对象允许你存储键值对,并且可以有重复的键。let map = new Map();
map.set('key1', 'value1');
map.set('key1', 'value2'); // 覆盖之前的值
map.set('key2', 'value3');
console.log(map.get('key1')); // 输出: value2
console.log(map.get('key2')); // 输出: value3
let obj = {};
obj['key1'] = 'value1';
obj['key1'] = 'value2'; // 覆盖之前的值
obj['key2'] = 'value3';
console.log(obj['key1']); // 输出: value2
console.log(obj['key2']); // 输出: value3
let array = [];
array.push({ key: 'key1', value: 'value1' });
array.push({ key: 'key1', value: 'value2' }); // 添加新的对象
array.push({ key: 'key2', value: 'value3' });
console.log(array.find(item => item.key === 'key1').value); // 输出: value1
领取专属 10元无门槛券
手把手带您无忧上云