Jquery 无法读取';未定义';,在数组中的最后一项上

Jquery 无法读取';未定义';,在数组中的最后一项上,jquery,arrays,Jquery,Arrays,我可以不断地从数组中添加或删除记录,即使记录是它已经处理过的记录的精确副本,它也可以正常工作,直到到达最后一个记录为止 数组: [ { "adID": "1", "isDefault": "false", "adName": "Ad 1 Name", "adDesc": "Ad 1 Description", "adURL": "", "adFormat": "image", "adImages": { "adImageDS

我可以不断地从数组中添加或删除记录,即使记录是它已经处理过的记录的精确副本,它也可以正常工作,直到到达最后一个记录为止

数组:

[
{
    "adID": "1",
    "isDefault": "false",
    "adName": "Ad 1 Name",
    "adDesc": "Ad 1 Description",
    "adURL": "",
    "adFormat": "image",
    "adImages": {
        "adImageDSK": "../img/bgfour.jpg",
        "adImageDEV": "../img/bgfour.jpg"
    }
},
{
    "adID": "2",
    "isDefault": "true",
    "adName": "Ad 2 Name",
    "adDesc": "Ad 2 Description",
    "adURL": "",
    "adFormat": "image",
    "adImages": {
        "adImageDSK": "../img/bgnine.jpg",
        "adImageDEV": "../img/bgnine.jpg"
    }
},
{
    "adID": "3",
    "isDefault": "false",
    "adName": "Ad 3 Name",
    "adDesc": "Ad 3 Description",
    "adURL": "",
    "adFormat": "image",
    "adImages": {
        "adImageDSK": "../img/bgseven.jpg",
        "adImageDEV": "../img/bgseven.jpg"
    }
},
{
    "adID": "4",
    "isDefault": "false",
    "adName": "Ad 4 Name",
    "adDesc": "Ad 4 Description",
    "adURL": "",
    "adFormat": "image",
    "adImages": {
        "adImageDSK": "../img/bgfive.jpg",
        "adImageDEV": "../img/bgfive.jpg"
    }
}
]
jQuery:

$.getJSON("../json/adverts.json", function (data) {
    "use strict";

    function loadAdData() {
        adArray = [];
        $.map(data, function (item) {
            adArray.push({
                'isDefault': item.isDefault,
                'adID': item.adID,
                'adName': item.adName,
                'adDesc': item.adDesc,
                'adURL': item.adURL,
                'adFormat': item.adFormat,
                'adImageDSK': item.adImages.adImageDSK,
                'adImageDEV': item.adImages.adImageDEV
            });
        });
    }

    loadAdData();

    var defArray = adArray;
    console.log(defArray);
    var newArray = [];

    $.each(defArray, function (i, item) {
        if (item.isDefault === 'true') {
            newArray.push({
                'adID': item.adID,
                'adName': item.adName,
                'adDesc': item.adDesc,
                'adURL': item.adURL,
                'adFormat': item.adFormat,
                'adImageDSK': item.adImageDSK,
                'adImageDEV': item.adImageDEV
            });
            defArray.splice($.inArray([i], defArray), 1);
        } else {
            console.log(item.adID);
        }
    })
}

真正的数组有10个项目长,但它们是上面数字更改后的复制和粘贴。我正在从一个文件中提取一些广告,并检查其中是否有必须显示的“默认值”,将它们放在不同的数组中以供以后使用。

我想您只是想查看该数组

function Advert(data) {
    this.isDefault = data.isDefault;
    this.adID = data.adID;
    this.adName = data.adName;
    this.adDesc = data.adDesc;
    this.adURL = data.adURL;
    this.adFormat = data.adFormat;
    this.adImageDSK = data.adImages ? data.adImages.adImageDSK : null;
    this.adImageDEV = data.adImages ? data.adImages.adImageDEV : null;
}

$.getJSON("../json/adverts.json").done(function (data) {
    var allAds = data.map(function (item) {
        return new Advert(item);
    });
    var defaultAds = allAds.filter(function (ad) {
        return ad.isDefault === 'true';
    });

    // ...
});

哪一行产生错误?为什么要使用splice?我想问题在于剪接()啊,是的,我不清楚。item.adID的控制台日志显示它正在拉入数据,并且isDefault=true的一个项在控制台中没有显示它的ID。然后它会告诉我接下来的一对,所以这也不会导致它停止,拼接是好的。当它启动JSON文件中的最后一条记录时,它会出错并告诉我它找不到undefined的属性。如果我有2或20条记录,就会发生这种情况。它在最后一条记录上失败,即使它以前没有在记录上失败,但它不是最后一条记录。如果(item.isDefault=='true',它会在行上显示错误{但是只在最后一条记录上,不管我删除了多少条记录。我花了几分钟来弄清楚这是怎么做的,但这几乎达到了预期的结果。我可以复制defaultAds代码并将其重命名为optionalAds,如果为false,则返回两个数组,将它们分开,然后从那里开始。谢谢!您可以因此,如果您需要的话,从一开始就用each而不是map构建两个独立的数组。