检查对象是否包含不起作用的值(JS)

时间:2016-08-30 03:10:26

标签: javascript arrays json object

我很难解决这个问题。
出于某种原因.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"]
                });
            }
        }

    }

随意要求澄清。

3 个答案:

答案 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的属性为namevalue,而不是total_kills