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构建两个独立的数组。