【问题标题】:searching an id in an array of dictionary in javascript在javascript中的字典数组中搜索id
【发布时间】:2014-07-07 08:15:32
【问题描述】:

我在 JavaScript 中有一个字典数组,如果找到 ID,我想通过匹配将一个元素添加到数组中的字典之一。 找到ID如何搜索?

这是我的字典:

{ 
    priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA' } ],
    test: [ { socketid: 'Q2n5RzcJqPeLZ5T9AAAB' } ] } ] 
}

我想通过搜索socketid "bVLmrV8I9JsSyON7AAAA" 来添加一个元素并将一个元素添加到字典中。

【问题讨论】:

  • 你想要像priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA',word:meaning } ]这样的结果对象或其他方式
  • 具有socketid属性的字典是否总是数组中的第一个元素?
  • 问题的标题是否应该是“在字典中搜索一个值”?

标签: javascript arrays dictionary


【解决方案1】:

在数据的当前状态下,您至少必须使用线性搜索。

var keyToFind = 'Q2n5RzcJqPeLZ5T9AAAB';
for(var i in dictionary){
    if(dictionary[i].socketid == keyToFind){
        // Add an element to the dictionary
        break; // If you want to break out of the loop once you've found a match
    }
}

【讨论】:

    【解决方案2】:
    var myObject = { 
        priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA' } ],
        test: [ { socketid: 'Q2n5RzcJqPeLZ5T9AAAB' } ] } ] 
    };
    
    myObject.priyanka.forEach(function(item){
        if(item.socketid === 'bVLmrV8I9JsSyON7AAAA'){
            // There is a socketid equals to bVLmrV8I9JsSyON7AAAA in priyanka
            break;
        } else {
            // Socketid not found
        }
    });
    

    请注意 Array.forEach 不完全跨浏览器兼容,也许您想使用简单的for 循环:

    for(var i=0; i < myObject.priyanka.length; i++){
        if(myObject.priyanka[i].socketid === 'bVLmrV8I9JsSyON7AAAA'){
            // There is a socketid equals to bVLmrV8I9JsSyON7AAAA in priyanka
            break;
        } else {
            // Socketid not found
        }
    }
    

    【讨论】:

      【解决方案3】:

      你的问题相当混乱,但我认为你想要做的是:

      var myDict = { 
          priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA' } ],
          test    : [ { socketid: 'Q2n5RzcJqPeLZ5T9AAAB' } ],
       }
      

      然后循环遍历数组(虽然在这种情况下,它们只包含一项......)

      var arr = myDict.priyanka
      for(var i=0; i<arr.length ; i++){
          if(arr[i].socketid === 'bVLmrV8I9JsSyON7AAAA'){
              var el = /whatever you wanna add?/
              arr.push(el);
             }
      }
      

      【讨论】:

        【解决方案4】:

        你可以像这样添加元素

        字典

        var dict = { 
        priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA' } ],
        test: [ { socketid: 'Q2n5RzcJqPeLZ5T9AAAB' } ] }
        

        功能

        var addToDict = function (dict,id,element) {
            for(key in dict){   //search in each key of dictionary
               var obj = dict[key];
               if(obj[0].socketid == id)   // if that key contains socketId
                 obj.push(element);    // add element to key's array
            }
        }
        

        调用函数

        addToDict(dict,'bVLmrV8I9JsSyON7AAAA',{"word":"meaning"}) 
        console.log(dict)  // because object will be passed by reference the `dict` will changed.
        

        【讨论】:

        • @user3805349 您应该接受答案并投票赞成有帮助的 cmets 和答案。所以其他观众会有所帮助。谢谢
        • @priyanka(offTopic 评论但是...)您真的应该考虑将答案标记为已接受。这是在 SO 上说“谢谢”的一种方式,也可以让其他人快速找到对您最有帮助的答案。
        【解决方案5】:

        你可以使用这个辅助函数:

        function findInDict(dict, predicate) 
        {
            for (var prop in dict) {
                if (dict.hasOwnProperty(prop) && predicate(dict[prop], prop, dict)) {
                    return prop;
                }
            }
            return null;
          };
        }
        

        然后执行搜索:

        // find property on main dictionary
        var prop = findInDict(dict, function(value, name) {
            // name is property name
            // value is property value
            return value[0].socketid == 'bVLmrV8I9JsSyON7AAAA';
        });
        
        if (prop === null) {
            // prop doesn't exist, so create one?
        }
        

        【讨论】:

          猜你喜欢
          • 2023-03-13
          • 2015-03-28
          • 2016-03-11
          • 1970-01-01
          • 1970-01-01
          • 2017-02-03
          • 2016-08-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多