我正在为每个公式创建一个Object。公式[0] = start_obj是unixtimestamps,公式1也是unixtimestamps。在某些情况下,我需要切断阵列中的最后一个印章。我尝试使用popind()和splice()方法。两者都进入rangeError。
这是我的代码:
var formel_obj = {} ;
formel_obj.start_obj = "change=[ (( x1 ))>0 ]; start=[ T(find(change)); T(1) ]; res=[start];" ;
formel_obj.stop_obj = "change=[ (( x1 ))<0 ]; stop=[ T(find(change)); T(1) ]; res=[stop];" ;
var label, formel ;
for(label in formel_obj) {
formel = formel_obj[label] ;
this[label] = new Array() ;
this[label] = wedge.calc.eval_with_timeaxis( formel, tag_x1, {timebase: interval_length, intervals: [ { start: t_axis_start, end: t_axis_stop } ] })[0] ; // creating for both formel ojects an array from function - see console log
}
last=start_obj[Object.keys(start_obj).length - 1] ;
pre_last=start_obj[Object.keys(start_obj).length - 2] ;
if (last < pre_last) {
console.log(start_obj.length) ;
console.log(start_obj) ;
start_obj.pop() ; results in Range error , why?
}
来自控制台的数组如下所示:
>> start_obj
[1446153600, 1446163200, 1446170400, 1446229200, 1446270600, 1446364200, 1446366600, 1446415200, 1446422400, 1446436200, 1446452400, 1446457200, 1446472200, 1446133800]
>> stop_obj
[1446157800, 1446164400, 1446173400, 1446267000, 1446363000, 1446364800, 1446409200, 1446421800, 1446435000, 1446450600, 1446456600, 1446464400, 1446472800, 1446133800]
>> start_obj[0]
1446153600
>> start_obj.length
14
>> start_obj.pop()
is RangeError .....
我真的不知道为什么;(
有什么想法吗?
EDIT_1:
它是一个Runtime数组,从控制台看屏幕。 Screenshot
EDIT_2:
再次感谢大家,你真棒。我发现这绝对不是一个普通的阵列。我写了一个函数,将这个凌乱的数组(或者这是什么)转换成常规数组。这是商业软件,我没有直接访问wedge.what.ever()正在做的这些“后台功能”。 无论如何,谢谢你们所有人在这里进行闪电般的讨论。
这是转换函数:
function form_reg_array (runtimearray) {
var item ;
newarray = new Array() ;
for (item in runtimearray) {
newarray.push(runtimearray[item]) ;
}
return newarray
}
我称之为:
start_obj=form_reg_array(start_obj)
将其转换为常规数组!感谢大家的大声思考。
答案 0 :(得分:2)
当我运行以下代码(从您的示例中简化)时,它可以工作:
var start = [1446153600, 1446163200, 1446170400, 1446229200, 1446270600, 1446364200, 1446366600, 1446415200, 1446422400, 1446436200, 1446452400, 1446457200, 1446472200, 1446133800]
var end = [1446157800, 1446164400, 1446173400, 1446267000, 1446363000, 1446364800, 1446409200, 1446421800, 1446435000, 1446450600, 1446456600, 1446464400, 1446472800, 1446133800]
var element = document.createElement('p');
element.textContent = end.pop();
document.body.appendChild(element);
因此,错误可能是在您的示例代码中,我只能看到formel_obj.start_obj
被声明,而不是实际的start_obj
,这将是未定义的pop
。为了更好地帮助您,我们需要知道您是否在this
上下文中运行。如果没有,最好使用window
声明,或者,根本不是这样。如果您使用this
来声明它,那么 还需要this
来阅读它。因此,使用this.start_obj
可能会有效。
答案 1 :(得分:2)
ES6文档显示pop不会生成Range错误。 ECMA Array.pop
您正在调用的pop不是本机Array pop。您必须提供该功能的代码才能为我们提供帮助。此外,由于它不是原生的,您应该能够使用调试器进入它并找到问题的根源。
答案 2 :(得分:0)
RuntimeArray
类型显然不支持数组的所有方法,或者不正确。
由于它具有length
属性和编号属性,您可以自己执行脏工作以删除最后一项:
start_obj.length--;
delete start_obj[start_obj.length];
此代码也适用于实际数组。减少长度也将删除最后一项,而delete
将无法完成任务。