поиск идентификатора в массиве словаря в javascript

#javascript #arrays #dictionary

#javascript #массивы #словарь

Вопрос:

У меня есть массив dictionary в JavaScript, и я хочу добавить элемент в один из словарей в массиве путем сопоставления, если идентификатор найден. Как выполнить поиск, если идентификатор найден?

Это мой словарь:

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

Я хочу добавить элемент путем поиска socketid «bVLmrV8I9JsSyON7AAAA» и добавить элемент в словарь.

Комментарии:

1. вам нужен результирующий объект, подобный priyanka: [ { socketid: 'bVLmrV8I9JsSyON7AAAA',word:meaning } ] или каким-либо другим способом

2. Всегда ли словарь со socketid свойством является первым элементом в массиве?

3. разве заголовок вопроса не должен быть «поиск значения в словаре словарей»?

Ответ №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.
  

Комментарии:

1. @user3805349 вы должны принять ответы и поддержать комментарии и ответы, которые являются полезными. чтобы другим зрителям было полезно. Спасибо

2. @priyanka (оффтопический комментарий, но …) вам действительно следует пометить ответ как принятый. Это способ сказать «спасибо» здесь, на SO, но также и для других людей, чтобы быстро найти ответ, который был наиболее полезен для вас.

Ответ №5:

Вы можете использовать эту вспомогательную функцию:

 function findInDict(dict, predicate) 
{
    for (var prop in dict) {
        if (dict.hasOwnProperty(prop) amp;amp; 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?
}