【发布时间】:2019-06-07 18:28:53
【问题描述】:
当试图通过传入一个字符串数组来构造一个类时,新的对象字符串数组是空的。
我尝试了几种不同的方法来初始化构造函数中的新对象字符串数组,包括但不限于以下几种:
this.newArray = oldarray.slice();
this.newArray = Array.from(oldarray);
this.newArray = oldarray.map( s => { return s; });
遍历旧数组并将元素一次一个推入新数组。
这里有趣的是,在创建 for 循环时,我注意到字符串数组的行为就像它有一个名为“数组”的属性。所以for循环不会处理,因为oldarray.length = 0,但是oldarray.array.length = 5
我可以在调试器中看到这一点。如果我尝试将代码更改为引用oldarray.array,它会强调并抱怨.array 部分,并且无法在ng serve 下编译。
我知道这可能最终会变得简单/愚蠢,而这只是我盯着同一个代码几个小时的问题。
export class Widget {
public role: string;
public array: WidgetTuple[];
constructor(role: string, tuplearray?: WidgetTuple[]) {
this.role = role;
this.array = [];
if (tuplearray != undefined) {
for (var lcv = 0; lcv < tuplearray.length; lcv++) {
var tupl = new WidgetTuple(tuplearray[lcv].widgetGrouper);
this.array.push(tupl);
}
}
}
}
export class WidgetTuple {
public widgetGrouper: string[];
constructor(strvalues?: string[]) {
this.widgetGrouper = [];
if (strvalues != undefined) {
this.widgetGrouper = strvalues.slice();
//this.widgetGrouper = strvalues.map()
//for (var lcv = 0; lcv < strvalues.length; lcv++) {
// var entry = strvalues[lcv].toString();
// this.widgetGrouper.push(entry);
//}
}
}
}
我希望原始 widgetGrouper 字符串数组中的字符串元素包含在添加到 Widget 数组的新 WidgetTuple 对象中。
到目前为止的所有尝试,在新创建的对象中产生空字符串数组结果。
提前感谢您的帮助。
这在我的评论中没有很好地格式化,所以在这里,在 VS 中点击调试断点并查看 strvalues:
- strvalues Array(0) [] Object
+ array Array(4) ["widgetone", "widgettwo", "someitem", …] Object
length 0 number
+ __proto__ Array(0) [, …] Object
【问题讨论】:
-
the string array acts like it has a property called "array"- 你是指浏览器控制台吗?他们通常只是说“数组”或“对象”只是为了弄清楚它是什么。 -
对不起,更具体地说,我的参考是从 Visual Studio 中的断点调试。击中断点,strvaluse 看起来像这样: - strvalues Array(0) [] Object + array Array(4) ["widgetone", "widgettwo", "someitem", ...] Object length 0 number + proto Array(0) [, ...] 对象
-
我不知道您遇到的具体问题是什么。您的问题是什么?
-
问题是,为什么新对象没有正确实例化? strvalues 有 4 个条目,但推入小部件数组的 tupl 对象在其 WidgetTuple 对象中没有字符串。
-
你是如何实例化对象的?我怀疑您将
WidgetTuple[]以外的其他内容传递给您的构造函数。
标签: angular typescript