我是javascript的新手。我将以下代码放在一起以获取枚举中的项目,将其推送到数组然后从数组中读回。由于某些原因,我推送到数组的方式与我读取数组时的内容不同。我可以想一些关于它是如何发生的理论,例如当我将一个元素从枚举推送到数组时,如果它是数组中的唯一元素,它将被解释为枚举时的第一个元素但我希望能更好地解释这是怎么回事:这是我的代码:
var 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"}
};
var dataArray = [];
for (var x in dataEnum) {
if (dataEnum[x].Number == "3") {
dataArray.push(x);
console.log("Object " + x + " with name " + dataEnum[x].Name + " and number " + dataEnum[x].Number + " was pushed in the array");
// Results in:
// Object 2 with name C and number 3 was pushed in the array
}
}
for (var y in dataArray) {
console.log("Object " + y + " with name " + dataEnum[y].Name + " and number " + dataEnum[y].Number + " was read from the array");
// Results in:
// Object 0 with name A and number 1 was read from the array
}

答案 0 :(得分: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);
返回["C and number 3 was read from the array"]
答案 1 :(得分:0)
您正在打印dataEnum[y]
,但y
是dataArray
的索引,而不是dataEnum
。 dataArray[y]
中元素的值是dataEnum
的索引,因此您应该打印dataEnum[dataArray[y]]
。
var 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"}
};
var dataArray = [];
for (var x in dataEnum) {
if (dataEnum[x].Number == "3") {
dataArray.push(x);
console.log("Object " + x + " with name " + dataEnum[x].Name + " and number " + dataEnum[x].Number + " was pushed in the array");
// Results in:
// Object 2 with name C and number 3 was pushed in the array
}
}
for (var y in dataArray) {
console.log("Object " + dataArray[y] + " with name " + dataEnum[dataArray[y]].Name + " and number " + dataEnum[dataArray[y]].Number + " was read from the array");
// Results in:
// Object 0 with name A and number 1 was read from the array
}