自定义键不起作用的Javascript array.forEach

自定义键不起作用的Javascript array.forEach,javascript,arrays,Javascript,Arrays,我已经动态生成了一个数组 var userData = new Array(); var userHash = "HashCode123"; // now I push object to that array: userData[userHash].username = "Ferdo"; userData[userHash].ban = 0; 返回此值的控制台: userData [] //why this is not array of object(s)? userData[hash

我已经动态生成了一个数组

var userData = new Array();
var userHash = "HashCode123";

// now I push object to that array:
userData[userHash].username = "Ferdo";
userData[userHash].ban = 0;
返回此值的控制台:

userData
[] //why this is not array of object(s)?

userData[hash]
Object {username: "Ferdo", ban: 0}

我需要运行
userData.forEach()
,但我不能,因为数组是空的?感谢您的帮助。

在向数组添加字符串键时,它会“转换”为对象(这不是完全准确的,但您会明白这一点)

数组是可编辑的,只能有数字键

如果要在对象上迭代,则需要对my_对象中的let项使用

下面是我喜欢在对象上迭代的方式

const keys = ['apple', 'banana', 'orange'];
let fruits = [];

keys.forEach(x => fruits[x] = `${x} is a fruit`);

// now we have fruits.apple, fruits.banana, fruits.orange
// Since it's now an object you'll need to get the keys and iterate over that

const fruit_keys = Object.keys(fruits);
fruit_keys.forEach(x => console.log(fruits[x]));
为了让它发挥作用,这里有一把小提琴


向数组添加字符串键时,会将其“转换”为对象(这不是完全准确的,但你会明白这一点)

数组是可编辑的,只能有数字键

如果要在对象上迭代,则需要对my_对象中的let项使用

下面是我喜欢在对象上迭代的方式

const keys = ['apple', 'banana', 'orange'];
let fruits = [];

keys.forEach(x => fruits[x] = `${x} is a fruit`);

// now we have fruits.apple, fruits.banana, fruits.orange
// Since it's now an object you'll need to get the keys and iterate over that

const fruit_keys = Object.keys(fruits);
fruit_keys.forEach(x => console.log(fruits[x]));
为了让它发挥作用,这里有一把小提琴


forEach
仅迭代数组的元素。只有属性名称的数值介于0和232-2之间的属性才被视为数组的元素


“HashCode123”
不符合此标准。如果需要任意的“键”名称,可以使用对象并对其进行迭代()。

forEach
仅对数组的元素进行迭代。只有属性名称的数值介于0和232-2之间的属性才被视为数组的元素


“HashCode123”
不符合此标准。如果你想要任意的“键”名称,你可以使用一个对象并在上面迭代()。

JavaScript中的数组是对象,所以你可以给它们这样的字符串属性名,但是没有一个数组方法会注意这些。迭代中只包含数值属性等。谢谢你,现在我明白了数组不是哈希映射。JavaScript中的数组是对象,所以你可以给它们这样的字符串属性名,但没有一个数组方法会注意这些。迭代等中只包含数值属性。谢谢。现在我明白了数组不是哈希映射。你不是想让
fruits
成为一个对象而不是数组吗?通常我会的,是的。但在L.Dave发布的示例中,他的是一个数组,所以我在示例中使用了这个数组。但是使用数组会给人错误的印象。如果不使用数组作为数组,则不应使用它。不要重复OP犯的错误。毕竟,他们来这里是为了得到“适当”的解决方案。我完全同意。只是想坚持用户最初的做法,强调需要使用Object.keys来获取字符串键名。你的意思不是要将
fruits
作为对象而不是数组吗?通常我会这样做。但在L.Dave发布的示例中,他的是一个数组,所以我在示例中使用了这个数组。但是使用数组会给人错误的印象。如果不使用数组作为数组,则不应使用它。不要重复OP犯的错误。毕竟,他们来这里是为了得到“适当”的解决方案。我完全同意。只是试图坚持用户最初的做法,以强调需要使用Object.keys来获取字符串键名称。