传递枚举的项-JavaScript
我是javascript新手。我将以下代码放在一起,以获取枚举中的一个项,将其推送到数组中,然后从数组中读回。由于某些原因,我推送到数组的内容与读取数组时得到的内容不同。我可以想出一些理论来解释它是如何发生的,比如当我将一个元素从enum推送到数组中时,如果该元素是数组中唯一的元素,那么当它被读回时,它将被解释为enum中的第一个元素,但我希望能更好地解释这是如何发生的:下面是我的代码:传递枚举的项-JavaScript,javascript,arrays,enums,Javascript,Arrays,Enums,我是javascript新手。我将以下代码放在一起,以获取枚举中的一个项,将其推送到数组中,然后从数组中读回。由于某些原因,我推送到数组的内容与读取数组时得到的内容不同。我可以想出一些理论来解释它是如何发生的,比如当我将一个元素从enum推送到数组中时,如果该元素是数组中唯一的元素,那么当它被读回时,它将被解释为enum中的第一个元素,但我希望能更好地解释这是如何发生的:下面是我的代码: var dataEnum={ 0:{Name:“A”,Number:“1”}, 1:{姓名:“B”,号码:
var dataEnum={
0:{Name:“A”,Number:“1”},
1:{姓名:“B”,号码:“2”},
2:{姓名:“C”,编号:“3”},
3:{姓名:“D”,编号:“4”},
4:{姓名:“E”,号码:“5”}
};
var dataArray=[];
for(数据枚举中的变量x){
if(数据枚举[x]。编号=“3”){
dataArray.push(x);
console.log(“名为“+dataEnum[x].name+”和编号为“+dataEnum[x].number+”的对象“+x+”被推送到数组中”);
//结果:
//名为C、编号为3的对象2被推送到数组中
}
}
for(数据数组中的变量y){
console.log(“从数组中读取了名为“+dataEnum[y].name+”和编号为“+dataEnum[y].number+”的对象“+y+”);
//结果:
//已从数组中读取名称为A、编号为1的对象0
}
您可以使用一些高阶函数来简化:
const dataEnum = {
0: {Name: "A", Number: "1"},
1: {Name: "B", Number: "2"},
2: {Name: "C", Number: "3"},
3: {Name: "D", Number: "4"},
4: {Name: "E", Number: "5"}
};
const result = Object.keys(dataEnum)
.filter(d => dataEnum[d].Number == "3")
.map(d => dataEnum[d].Name + " and number " + dataEnum[d].Number + " was read from the array");
console.log(result);
返回您正在打印的
dataEnum[y]
,但y
是dataArray
的索引,而不是dataEnum
。dataArray[y]
中元素的值是dataEnum
的索引,因此您应该打印dataEnum[dataArray[y]
var dataEnum={
0:{Name:“A”,Number:“1”},
1:{姓名:“B”,号码:“2”},
2:{姓名:“C”,编号:“3”},
3:{姓名:“D”,编号:“4”},
4:{姓名:“E”,号码:“5”}
};
var dataArray=[];
for(数据枚举中的变量x){
if(数据枚举[x]。编号=“3”){
dataArray.push(x);
console.log(“名为“+dataEnum[x].name+”和编号为“+dataEnum[x].number+”的对象“+x+”被推送到数组中”);
//结果:
//名为C、编号为3的对象2被推送到数组中
}
}
for(数据数组中的变量y){
console.log(“对象”+dataArray[y]+,名称为“+dataEnum[dataArray[y]]。名称+”和数字“+dataEnum[dataArray[y]]。数字+”已从数组中读取”);
//结果:
//已从数组中读取名称为A、编号为1的对象0
}
这个问题不清楚。它应该打印什么?您的第二个循环是打印dataEnum[y]
,而不是dataArray[y]
。谢谢Rostero。你的建议很有效。虽然我需要将该项转移到一个数组中,以便稍后检索,但在实际代码中,数组中会有更多的元素,作为稍后将从中读取的项列表