我有两个JSON对象ctyIndem
和counties
。 ctyIndem
对象包含美国各州的所有县,ctyIndem
有县在该州支付的赔偿金,但不支付那些没有付款的县。我需要做的是迭代两个JSON,如果counties
中缺少一个县,则添加var counties = [{
FIPS: 1001,
County: "Autauga",
State: "ALABAMA"
}, {
FIPS: 1003,
County: "Baldwin",
State: "ALABAMA"
}, {
FIPS: 1005,
County: "Barbour",
State: "ALABAMA"
}, {
FIPS: 1007,
County: "Bibb",
State: "ALABAMA"
}, {
FIPS: 1009,
County: "Blount",
State: "ALABAMA"
}, {
FIPS: 1011,
County: "Bullock",
State: "ALABAMA"
}];
var ctyIndem = [{
Year: 2015,
State: "ALABAMA",
id: 1001,
County: "Autauga",
Indem: 50
}, {
Year: 2015,
State: "ALABAMA",
id: 1003,
County: "Baldwin",
Indem: 200
}, {
Year: 2015,
State: "ALABAMA",
id: 1005,
County: "Barbour ",
Indem: 1501
}];
counties.forEach(function(a, v) {
if (a.FIPS == ctyIndem[v].id) { //County is present, then is ok
console.log(ctyIndem[v].id);
} else {//County not present, add new info
var temp = [];
temp.push({
Year: ctyIndem[0].Year,
State: a.State,
id: a.FIPS,
County: a.County,
Indem: 0
});
Array.prototype.push.apply(ctyIndem, temp);
}
});
console.log(ctyIndem);
中缺少的信息。
JS
Cluster.builder().addContactPoints("<cassandraip>")
.withProtocolVersion(ProtocolVersion.V3)
.build();
问题是当我遍历数组并且达到县FIPS和id不匹配时,我真的不知道该怎么做。我一直得到未捕获的TypeError:无法读取未定义错误的属性'id',因为显然没有匹配。 谢谢你的帮助。
答案 0 :(得分:1)
在循环中,首先需要检查$scope.contactList = response.data;
是否存在
ctyIndem[v]
答案 1 :(得分:1)
您的搜索逻辑错误。它仅检查ctyIndem
中同一索引处的元素是否具有匹配的id
。但是两个数组中的索引不匹配。你需要搜索整个数组。
执行此操作的一种简单方法是创建一个对象,其对象是您要搜索的ID。然后,您可以使用a.FIPS
作为索引来查看它是否存在。
var ctyIds = {};
ctyIndem.forEach(function(c) {
ctyIds[c.id] = true;
});
counties.forEach(function(a) {
if (!ctyIds[a.FIPS]) {
ctyIndem.push({
Year: ctyIndem[0].Year,
State: a.State,
id: a.FIPS,
County: a.County,
Indem: 0
});
}
});
答案 2 :(得分:1)
首先使用ctyIndem中的id创建一个平面数组。使用Array.filter方法,您可以生成id列表中缺少的县数组。然后为每个缺少的县推入一个新对象:
var indemIds = ctyIndem.map(function (c) { return c.id });
var missingFromIndem = counties.filter(function (cnty) {
return indemIds.indexOf(cnty.FIPS) === -1;
});
missingFromIndem.forEach(function (cnty) {
ctyIndem.push({
id: cnty.FIPS,
State: cnty.State,
County: cnty.County
});
});