gpt4 book ai didi

Javascript:读取对象数组

转载 作者:行者123 更新时间:2023-11-29 15:41:06 26 4
gpt4 key购买 nike

我有两个 .js 文件。其中之一,我想用具有两个属性的对象填充一个数组。在另一个文件中,我想遍历数组并使用对象属性。

我的代码是这样的:

文件1.js

var selection = new Object();
selection.column = "";
selection.term = "";

var selectionContainer = new Array();
...
press: function(){
var i;
for (i=1;i<=selectionContainer.length;i++){
selection = selectionContainer[i];
alert("Search Term: " + selection.column + selection.term);
}
}

文件2.js

change: function(oEvent){
selection.column = "someText";
selection.term = "someOtherText";
selectionContainer[nrOfEntries] = selection;
}

执行 javascript 时,我收到“未捕获类型错误:无法读取未定义的属性‘列’”。

我做错了什么?

最佳答案

在 JS 中,数组以索引 0 开头, 最后一个元素将位于 .length - 1 .所以你需要改变你的循环开始于 0并使用 <而不是 <= :

for (i=0;i<selectionContainer.length;i++){

您收到的错误,Uncaught TypeError: Cannot read property 'column' of undefined' , 是因为当你的计数器上升到 selectionContainer.length你试图读取一个刚好超过数组末尾的元素,它本身并没有给出错误,它只是返回 undefined ,然后 undefined.column给出错误。

而且 - 虽然这有点难说,因为我不确定你没有显示的代码 - 在你显示的代码中,它看起来像你正在填充你的数组对同一个对象的多个引用,因为在你的change函数更新现有 selection 的属性对象,然后将该对象的引用放入数组中。我相信此时您需要创建一个新对象:

change: function(oEvent){
selection = new Object();
selection.column = "someText";
selection.term = "someOtherText";
selectionContainer[nrOfEntries] = selection;
}

...但是更简单的方法是只使用对象字面量:

change: function(oEvent){
selectionContainer[nrOfEntries] = { column : "someText", term : "someText" };
}

你不说什么nrOfEntries是,但是当 JS 为您提供 .length 时,您不需要单独的变量来跟踪数组中元素的数量。属性(property)。在任何情况下,如果您只是想添加到数组的末尾,您都可以这样做:

  selectionContainer.push( { column : "someText", term : "someText" } );

一般来说,使用数组字面量和对象字面量来创建空数组和对象被认为是最佳实践,因此代码的开头可以是:

var selection = {};
...
var selectionContainer = [];

关于Javascript:读取对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18895806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com