首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历对象中的对象,然后在javascript中向另一个对象添加属性。

循环遍历对象中的对象,然后在javascript中向另一个对象添加属性。
EN

Stack Overflow用户
提问于 2015-04-23 02:46:16
回答 3查看 59关注 0票数 0

希望能够将对象中的属性添加到单独的对象中,使其工作到一定程度,但正在返回NaN?

代码语言:javascript
复制
var votes = { "Alex": { president: "Bob", vicePresident: "Devin", secretary: "Gail", treasurer: "Kerry" },
"Bob": { president: "Mary", vicePresident: "Hermann", secretary:   "Fred", treasurer: "Ivy" },
"Cindy": { president: "Cindy", vicePresident: "Hermann", secretary: "Bob", treasurer: "Bob" },
"Devin": { president: "Louise", vicePresident: "John", secretary: "Bob", treasurer: "Fred" }, 
 "Ernest": { president: "Fred", vicePresident: "Hermann", secretary:  "Fred", treasurer: "Ivy" },
"Fred": { president: "Louise", vicePresident: "Alex", secretary: "Ivy", treasurer: "Ivy" },
"Gail": { president: "Fred", vicePresident: "Alex", secretary: "Ivy", treasurer: "Bob" },
"Hermann": { president: "Ivy", vicePresident: "Kerry", secretary: "Fred", treasurer: "Ivy" },
 "Ivy": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Gail" },
"John": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Kerry" },
"Kerry": { president: "Fred", vicePresident: "Mary", secretary: "Fred", treasurer: "Ivy" },
"Louise": { president: "Nate", vicePresident: "Alex", secretary: "Mary", treasurer: "Ivy" },
"Mary": { president: "Louise", vicePresident: "Oscar", secretary: "Nate", treasurer: "Ivy" },
"Nate": { president: "Oscar", vicePresident: "Hermann", secretary: "Fred", treasurer: "Tracy" },
"Oscar": { president: "Paulina", vicePresident: "Nate", secretary: "Fred", treasurer: "Ivy" },
"Paulina": { president: "Louise", vicePresident: "Bob", secretary: "Devin", treasurer: "Ivy" },
"Quintin": { president: "Fred", vicePresident: "Hermann", secretary: "Fred", treasurer: "Bob" },
"Romanda": { president: "Louise", vicePresident: "Steve", secretary: "Fred", treasurer: "Ivy" },
"Steve": { president: "Tracy", vicePresident: "Kerry", secretary: "Oscar", treasurer: "Xavier" },
"Tracy": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Ivy" },
"Ullyses": { president: "Louise", vicePresident: "Hermann", secretary: "Ivy", treasurer: "Bob" },
"Valorie": { president: "Wesley", vicePresident: "Bob", secretary: "Alex", treasurer: "Ivy" },
"Wesley": { president: "Bob", vicePresident: "Yvonne", secretary: "Valorie", treasurer: "Ivy" },
"Xavier": { president: "Steve", vicePresident: "Hermann", secretary: "Fred", treasurer: "Ivy" },
"Yvonne": { president: "Bob", vicePresident: "Zane", secretary: "Fred", treasurer: "Hermann" },
"Zane": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Mary" }
};

// Tally the votes in voteCount.
var voteCount = {
   president: {},
   vicePresident: {},
   secretary: {},
   treasurer: {}
};

for (var student in votes) {
  if (votes.hasOwnProperty(student)) {
    var office = votes[student];
    for (var prop in office) {
      if (!office.hasOwnProperty("president")) {
        voteCount["president"][office["president"]] = 0;
      } else {
        voteCount["president"][office["president"]] += 1;
      }
    }
  }
}

以上为循环返回NaN

我正在向voteCount传递信息,但没有得到多少选票??

voteCount变成

代码语言:javascript
复制
voteCount
{ president: 
  { Bob: NaN,
    Mary: NaN,
    Cindy: NaN,
    Louise: NaN,
    Fred: NaN,
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-23 03:09:21

我认为您的错误是在结果对象中添加属性。

这是一种不同的方法,它根据角色动态地构建结果对象。

代码语言:javascript
复制
var results = {};

var n,r,v;

for (n in votes) {
    for (r in votes[n]) {
        if (typeof results[r] === "undefined") {
             results[r] = {};
        }
        if (typeof results[r][votes[n][r]] === "undefined") {
             results[r][votes[n][r]] = 0;
        }
        results[r][votes[n][r]]+=1;
    }
}
console.log(results);

另外,最好将所有的var放在代码的开头,将它们放在fors中并不限制它们的范围,它们是在解析时声明的,并且是全局的。

票数 1
EN

Stack Overflow用户

发布于 2015-04-23 02:57:32

稍微修正了您的代码,希望我没有破坏逻辑:

代码语言:javascript
复制
for (var student in votes) {
  if (votes.hasOwnProperty(student)) {
    var office = votes[student];
    for (var prop in office) {
      // init property with 0
      if (!voteCount[prop][office[prop]]) {
        voteCount[prop][office[prop]] = 0;
      }

      // add vote
      voteCount[prop][office[prop]]++;
    }
  }
}

小提琴是这里

UPD:让它适用于所有的办公室。

票数 1
EN

Stack Overflow用户

发布于 2015-04-23 03:01:47

您可以通过更改检查总统办公室hasOwnProperty的行来解决这一问题:

代码语言:javascript
复制
 if (!office.hasOwnProperty("president")) {

对此:

代码语言:javascript
复制
 if (!voteCount["president"].hasOwnProperty(office["president"])) {

最终结果是:

代码语言:javascript
复制
        var votes = { "Alex": { president: "Bob", vicePresident: "Devin", secretary: "Gail", treasurer: "Kerry" },
        "Bob": { president: "Mary", vicePresident: "Hermann", secretary:   "Fred", treasurer: "Ivy" },
        "Cindy": { president: "Cindy", vicePresident: "Hermann", secretary: "Bob", treasurer: "Bob" },
        "Devin": { president: "Louise", vicePresident: "John", secretary: "Bob", treasurer: "Fred" },
        "Ernest": { president: "Fred", vicePresident: "Hermann", secretary:  "Fred", treasurer: "Ivy" },
        "Fred": { president: "Louise", vicePresident: "Alex", secretary: "Ivy", treasurer: "Ivy" },
        "Gail": { president: "Fred", vicePresident: "Alex", secretary: "Ivy", treasurer: "Bob" },
        "Hermann": { president: "Ivy", vicePresident: "Kerry", secretary: "Fred", treasurer: "Ivy" },
        "Ivy": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Gail" },
        "John": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Kerry" },
        "Kerry": { president: "Fred", vicePresident: "Mary", secretary: "Fred", treasurer: "Ivy" },
        "Louise": { president: "Nate", vicePresident: "Alex", secretary: "Mary", treasurer: "Ivy" },
        "Mary": { president: "Louise", vicePresident: "Oscar", secretary: "Nate", treasurer: "Ivy" },
        "Nate": { president: "Oscar", vicePresident: "Hermann", secretary: "Fred", treasurer: "Tracy" },
        "Oscar": { president: "Paulina", vicePresident: "Nate", secretary: "Fred", treasurer: "Ivy" },
        "Paulina": { president: "Louise", vicePresident: "Bob", secretary: "Devin", treasurer: "Ivy" },
        "Quintin": { president: "Fred", vicePresident: "Hermann", secretary: "Fred", treasurer: "Bob" },
        "Romanda": { president: "Louise", vicePresident: "Steve", secretary: "Fred", treasurer: "Ivy" },
        "Steve": { president: "Tracy", vicePresident: "Kerry", secretary: "Oscar", treasurer: "Xavier" },
        "Tracy": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Ivy" },
        "Ullyses": { president: "Louise", vicePresident: "Hermann", secretary: "Ivy", treasurer: "Bob" },
        "Valorie": { president: "Wesley", vicePresident: "Bob", secretary: "Alex", treasurer: "Ivy" },
        "Wesley": { president: "Bob", vicePresident: "Yvonne", secretary: "Valorie", treasurer: "Ivy" },
        "Xavier": { president: "Steve", vicePresident: "Hermann", secretary: "Fred", treasurer: "Ivy" },
        "Yvonne": { president: "Bob", vicePresident: "Zane", secretary: "Fred", treasurer: "Hermann" },
        "Zane": { president: "Louise", vicePresident: "Hermann", secretary: "Fred", treasurer: "Mary" }
    };

    // Tally the votes in voteCount.
    var voteCount = {
        president: {},
        vicePresident: {},
        secretary: {},
        treasurer: {}
    };

    for (var student in votes) {
        if (votes.hasOwnProperty(student)) {
            var office = votes[student];
            for (var prop in office) {
                if (!voteCount["president"].hasOwnProperty(office["president"])) {
                    voteCount["president"][office["president"]] = 0;
                } else {
                    voteCount["president"][office["president"]] += 1;
                }
            }
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29812701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档