我很难解决这个问题。
出于某种原因.hasOwnProperty()无效。
我想要做的是在当前循环的数组中没有值(在数组内)时创建一个新对象(在另一个数组内)。
我不知道为什么,但第一个条件每次都会循环 ,而不是仅在条件满足时才循环。
P.S我循环到JSON。 Example of JSON I'm parsing
var keys = [
"total_kills",
"total_deaths",
"total_planted_bombs",
"total_defused_bombs",
"total_kills_knife",
"total_kills_headshot",
"total_wins_pistolround",
"total_wins_map_de_dust2",
"last_match_wins",
"total_shots_fired",
"total_shots_hit",
"total_rounds_played",
"total_kills_taser",
"last_match_kills",
"last_match_deaths",
"total_kills_hegrenade",
];
var resArray = stats.playerstats.stats;
var statsArray = [];
for (var i = 0; i < keys.length; i++) {
for (var j = 0; j < resArray.length; j++) {
if (!resArray[j]["name"].hasOwnProperty(keys[i])) {
resArray[j]["name"] = keys[i];
resArray[j]["value"] = "None";
statsArray.push({
"name": resArray[j]["name"],
"value": resArray[j]["value"]
});
}
if (resArray[j]["name"] === (keys[i])) {
statsArray.push({
"name": resArray[j]["name"],
"value": resArray[j]["value"]
});
}
}
}
随意要求澄清。
答案 0 :(得分:0)
如果在函数完成后查看原始数组(stats.playerstats.stats),您将看到它已重命名数组中的每个键。
这导致了这个问题。
if (!resArray[j]["name"].hasOwnProperty(keys[i])) {
resArray[j]["name"] = keys[i];
resArray[j]["value"] = "None";
您在这里说,如果此元素没有key [i]属性,则将其设置为keys [i],将值设置为none。所以你最终(几乎)将整个列表设置为keys [0] ... keys [last element]。所以每次都将所有元素设置为键[i]。
消除这两行,这样原来的json就不会改变,而且效果会更好。
答案 1 :(得分:0)
if (!resArray[j]["name"].hasOwnProperty(keys[i])) {
显然这种说法是错误的。你的resArray [j] [&#34; name&#34;]是字符串,而不是对象。通常,您希望检查一个对象是否具有使用hasOwnProperty方法的某些enumable属性。
答案 2 :(得分:0)
var obj = {name: "total_kills", value: 25555};
obj的属性为name
和value
,而不是total_kills
。