在javascript中的字典数组中搜索id

在javascript中的字典数组中搜索id,javascript,arrays,dictionary,Javascript,Arrays,Dictionary,我在JavaScript中有一个字典数组,如果找到ID,我想通过匹配将一个元素添加到数组中的一个字典中。 如果找到ID,如何搜索 这是我的字典: { priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA' } ], test: [ { socketid: 'Q2n5RzcJqPeLZ5T9AAAB' } ] } ] } 我想通过搜索socketid“bVLmrV8I9JsSyON7AAAA”添加一个元素,并向字典中添加一个元素 var

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

这是我的字典:

{ 
    priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA' } ],
    test: [ { socketid: 'Q2n5RzcJqPeLZ5T9AAAB' } ] } ] 
}
我想通过搜索
socketid
“bVLmrV8I9JsSyON7AAAA”添加一个元素,并向字典中添加一个元素

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
    }
}
for(变量i=0;i
在数据的当前状态下,您至少必须使用线性搜索

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
    }
}

你的问题相当令人困惑,但我认为你想做的是:

var myDict = { 
    priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA' } ],
    test    : [ { socketid: 'Q2n5RzcJqPeLZ5T9AAAB' } ],
 }
然后在数组中循环(尽管在本例中,它们只包含一项…)

var arr=myDict.priyanka

对于(var i=0;i您可以添加如下元素

字典

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.

您可以使用此帮助器功能:

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?
}

您想要像
priyanka:[{socketid:'bVLmrV8I9JsSyON7AAAA',word:means}]
这样的结果对象,或者其他方式是
socketid
属性的字典始终是数组中的第一个元素吗?问题的标题不应该是“在字典中搜索值”吗?@user3805349您应该接受答案,并对有帮助的评论和答案进行投票。这样其他观众就会得到帮助。Thanx@priyanka(非评论,但……)你应该考虑把答案标记为被接受。这是一种在这里说“谢谢”的方式,也可以让其他人快速找到对你最有帮助的答案。
// 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?
}