【问题标题】:javascript loop on object with just one array只有一个数组的对象上的javascript循环
【发布时间】:2017-10-22 15:57:58
【问题描述】:

我有这个对象结构,我需要循环并在数组上找到一些值,例如查找用户名是否等于 user2 ,我可以使用两个对象来完成(创建另一个对象并将数组键(如用户、地址等)放在那里)但我想知道我是否只能使用对象来完成,

这是对象的样本

var stuff = {
users :['user1','user2'],
address:['addr1', 'addr2'],
emails:['email1', 'email2'],
};

【问题讨论】:

  • 我很难理解您的问题,尤其是 “创建另一个对象并将数组键(如用户、地址等)放在那里” 部分。你能举一个例子(带代码)你能做什么,更全面地描述你在这里尝试做什么?

标签: javascript arrays node.js object


【解决方案1】:
var stuff = {
users :['user1','user2'],
address:['addr1', 'addr2'],
emails:['email1', 'email2'],
}
console.log(Object.keys(stuff))

输出将是

["users", "address", "emails"]

迭代内容 假设你想在对象的所有键中找到user2

keys = Object.keys(stuff)
for(let i in keys){
    // do something
    //console.log(stuff[keys[i]])
    ind = stuff[keys[i]].indexOf('user2')
    if(ind >=0){
        console.log('user2 found in ', keys[i])
    }
}

【讨论】:

  • 感谢您的回答,但它不起作用:) 我在循环中遇到了 undfiend
  • 这很明显。因为在循环体内没有代码。你应该搜索元素。里面
  • @Ninawatcher 看看这个。我希望这是你需要的
【解决方案2】:
var stuff = {
    users :['user1','user2'],
    address:['addr1', 'addr2'],
    emails:['email1', 'email2'],
};

function check(a) {
  for(var key in stuff) {
    var arr = stuff[key];
    for(var i = 0; i < arr.length; i++) {
            return arr[i] == a;
    }
  }
}

alert(check("user2"));

【讨论】:

    【解决方案3】:

    检查stuff.usersuser2Array#indexOf是否不是-1:

    var stuff = {
      users: ['user1', 'user2'],
      address: ['addr1', 'addr2'],
      emails: ['email1', 'email2'],
    };
    
    var isUser2Included = stuff.users.indexOf('user2') !== -1;
    
    console.log(isUser2Included);

    【讨论】:

      【解决方案4】:

      左右:

      var stuff = {
        users: ['user1', 'user2'],
        address: ['addr1', 'addr2'],
        emails: ['email1', 'email2'],
      };
      
      stuff.findIt = (key, val) => stuff[key].indexOf(val) != -1;
      
      console.log(stuff.findIt('users', 'user1'));
      console.log(stuff.findIt('users', 'user3'));
      console.log(stuff.findIt('emails', 'email1'));

      【讨论】:

      • 通过附加新方法在对象中查找项目?不是一个很好的主意。如果它已经有一个您正在覆盖的 find 属性怎么办?
      • @JLRishe 好吧,你是说覆盖是一个坏习惯? :)))) 我得到你的关注,但是......
      • @JLRishe 但是,为了比教皇更天主教,我重命名了该方法。你可以投票赞成 :))
      猜你喜欢
      • 2011-12-14
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多