Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排序后Jquery对象未定义,但在firebug中_Javascript_Jquery_Ajax_Object - Fatal编程技术网

Javascript 排序后Jquery对象未定义,但在firebug中

Javascript 排序后Jquery对象未定义,但在firebug中,javascript,jquery,ajax,object,Javascript,Jquery,Ajax,Object,我对返回数据的脚本执行ajax调用。我在firebug中看到了数据,它是正确的。当数据返回时,我会进行排序,它也会起作用。我在firebug中看到对象按我想要的方式排序。排序之后,我尝试访问一个键/值对。我在firebug中看到我想要的键/值在对象中。当我尝试使用对象键/值分配给变量时,它是未定义的。我正在尝试聚合重复数据。如果我没有用最好的方法去做,请用更好的方法来帮助我 数据样本 coreDate“060115” 芯型“星号11” 文件名“/var/www/html/Cores/gdb.ha

我对返回数据的脚本执行ajax调用。我在firebug中看到了数据,它是正确的。当数据返回时,我会进行排序,它也会起作用。我在firebug中看到对象按我想要的方式排序。排序之后,我尝试访问一个键/值对。我在firebug中看到我想要的键/值在对象中。当我尝试使用对象键/值分配给变量时,它是未定义的。我正在尝试聚合重复数据。如果我没有用最好的方法去做,请用更好的方法来帮助我

数据样本

coreDate“060115”
芯型“星号11”
文件名“/var/www/html/Cores/gdb.hamid.asterisk.060115”
jid“哈米德”

代码

$。什么时候(
$.ajax({
键入:“获取”,
url:'cf.php',
数据类型:“json”,
超时:120000,
})
)
.done(功能(coreInfo){
sort(函数(a,b){返回a.coreType>b.coreType});
var corests={};
coreStats.numofores=0;
corests.numOfCoreType=0;
coreStats.prevCoreType=coreInfo.coreType;
//由于某些原因,没有定义coreInfo.coreType。coreInfo对象存在,coreType在那里。我尝试了这个.coreType,但没有定义。
$.each(coreInfo,function(){
numOfCores++;
if(corests.prevCoreType!=此.coreType){
//这很有效。为什么我必须访问This.coreType而不是coreInfo.coreType?
$('#list>tbody:last child').append('+this.coreType+'+coreStats.numOfCoreType+'
corejid'); corests.numOfCoreType=0; } numOfCoreType++; coreStats.prevCoreType=this.coreType; //在这里设置prevCoreType很有效 }); $('#cores').html(“+corests.numocores+”
Core文件); }) .fail(函数(){ });
根据您的代码和描述,听起来好像
coreInfo
是一个对象数组,对吗?如果它是一个对象,它就不会有
sort()
方法,您的代码就停在那里

如果它是一个数组,它没有类似于
coreInfo.coreType
的属性。数组的每个元素都是一个具有
coreType
和其他属性的对象。这就是为什么您可以在
$.each()
回调中访问
this.coreType
$。each()
逐个元素迭代数组,并将每个元素传递到回调中

在Firebug中,
$之外的
coreInfo.coreType
。each()
,我怀疑您实际看到的是
coreInfo[0]。coreType
,即数组的第一个元素

为了帮助跟踪变量是否是数组,我强烈建议给数组命名,以反映这一事实:要么用复数,要么在名称中添加
List
array
,或者其他什么。像
coreInfo
这样的名称听起来像一个单数项。我会调用数组
coreList
coreArray
,或者干脆调用
cores
。就个人而言,为了简洁起见,我喜欢复数:
cores
表示核心信息数组,
core
表示该数组中的单个元素

这样,当您看到
cores.coreType
coreList.coreType
coreraray.coreType
时,它看起来会出错

顺便说一句,对于可读性更高的代码,我建议不要在
$.each()
回调中使用
this
。相反,请使用命名参数

$.each( coreInfo, function( i, core ) {
    coreStats.numOfCores++;
    if( coreStats.prevCoreType != core.coreType ) {
        $('#list > tbody:last-child').append(
            '<tr>' +
                '<td>' +
                    '<a href="' + core.fileName + '">' +
                        core.coreType +
                    '</a>' +  // MISSING IN ORIGINAL
                '</td>' +
                '<td>' +
                    coreStats.numOfCoreType +
                    '<br>core' +
                '</td>' +
                '<td>' +
                    'jid' +
                '</td>' +
            '</tr>'
        );
        coreStats.numOfCoreType = 0;
    }
    coreStats.numOfCoreType++;
    coreStats.prevCoreType = this.coreType;
});
最后,您的
sort
回调函数有一个bug,无法对数组进行正确排序。它可能在一个简单的测试用例中工作,但它将无法对其他数组进行排序。它必须处理所有三种情况:
,并为每种情况返回一个适当的值,可能如下所示:

coreInfo.sort( function( a, b ) {
    return(
        a.coreType < b.coreType ? -1 :
        a.coreType > b.coreType ? 1 :
        0
    );
});
coreInfo.sort(函数(a,b){
返回(
a、 coreTypeb.coreType?1:
0
);
});

为了验证我的假设,您可以发布一个实际JSON数据的示例,而不是一个格式化的表吗?

下面是从脚本
[{“coreDate”:“050415”,“jid”:“dspillman”,“coreType”:“runBrowser_11”,“fileName”返回的原始未格式化JSON:“\/var\/www\/html\/rhcCores\/coreFiles\/050415\/dspillman
\/gdb.log.runBrowser\u 11.20150504.dspillman\u CORE\u 040515-1202”,{“coreDate”:“050415”,“jid”:“ssamari”,“coreType”:“mdMgr\u 10”,“fileName”:“\/var\/www\/html\/rhcCores\/coreFiles\/0504045\/ssamari\/gdb.log.mdMgr\u 10.2015050504.ssamari”[开始时,我猜这是一个对象数组。coreInfo是返回的json.data。我一直认为这是一个对象。如果它是数组,这是默认行为还是我搞乱了什么?我会接受你关于名称的建议。你让我知道了缺失的部分。这是一个doh!时刻。最初我是按照y的方式格式化代码的你建议调试。在我“认为”我做对了之后,我压缩了它,但仍然没有成功。我也会更新排序函数。你的评论对我发送正确的路径非常有帮助。我将尝试使用数组索引访问列表中的第一个coreType,看看它是否有效。如果
coreInfo
是一个数组,我将使用它按预期工作,除了尝试访问整个数组而不是单个数组元素上的
coreType
和其他属性外,没有任何问题。
$('#cores').html( "<h1>" + cores.length + "</h1><br>Core Files" );
coreInfo.sort( function( a, b ) {
    return(
        a.coreType < b.coreType ? -1 :
        a.coreType > b.coreType ? 1 :
        0
    );
});