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