无法在数组中的最后一项上读取' undefined'的属性

时间:2015-04-27 10:59:32

标签: jquery arrays

我可以继续添加或删除数组中的记录,它会正常工作,直到它到达最后一个,即使该记录是已经处理过的记录的精确副本。

阵列:

[
{
    "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个项目,但它们是上面的复制和粘贴,数字已更改。我从文件中提取了一些广告并检查其中是否有任何广告是'默认'必须显示,将它们放在不同的数组中以供以后使用。

1 个答案:

答案 0 :(得分:1)

我认为你只想要filter数组。

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';
    });

    // ...
});