search backbone что - JSON найти в JavaScript
Я столкнулся с этой проблемой для сложной модели с несколькими вложенными объектами. Хорошим примером того, что я искал, было бы так: Допустим, у вас есть поляроид. И эта картина затем помещается в багажник автомобиля. Автомобиль находится внутри большого ящика. Ящик находится в трюме большого корабля с множеством других ящиков. Мне пришлось искать трюм, смотреть в ящики, проверять багажник, а затем искать существующую картину меня.
Я не мог найти никаких хороших решений в Интернете, и использование .filter()
работает только с массивами. Большинство решений предложили просто проверить, существует ли model["yourpicture"]
. Это было очень нежелательно, потому что, например, это только обыскало трюм корабля, и мне нужен был способ получить их дальше от кроличьей дыры.
Это рекурсивное решение, которое я сделал. В комментариях я подтвердил от TJ Crowder, что потребуется рекурсивная версия. Я думал, что поделюсь им, если кто-нибудь столкнется с подобной сложной ситуацией.
function ContainsKeyValue( obj, key, value ){
if( obj[key] === value ) return true;
for( all in obj )
{
if( obj[all] != null && obj[all][key] === value ){
return true;
}
if( typeof obj[all] == "object" && obj[all]!= null ){
var found = ContainsKeyValue( obj[all], key, value );
if( found == true ) return true;
}
}
return false;
}
Это будет начинаться с заданного объекта внутри графа и перезаписывать любые найденные объекты. Я использую его так:
var liveData = [];
for( var items in viewmodel.Crates )
{
if( ContainsKeyValue( viewmodel.Crates[items], "PictureId", 6 ) === true )
{
liveData.push( viewmodel.Crates[items] );
}
}
Который приведет к созданию массива ящиков, содержащих мою картину.
Есть ли лучший способ, кроме цикла, найти данные в JSON ? Это для редактирования и удаления.
for(var k in objJsonResp) {
if (objJsonResp[k].txtId == id) {
if (action == 'delete') {
objJsonResp.splice(k,1);
} else {
objJsonResp[k] = newVal;
}
break;
}
}
Данные упорядочены как список карт. Подобно:
[
{id:value, pId:value, cId:value,...},
{id:value, pId:value, cId:value,...},
...
]
Если данные JSON в вашем массиве каким-то образом отсортированы, существует множество поисков, которые вы могли бы реализовать. Однако, если вы не имеете дело с большим количеством данных, то вы, вероятно, будете в порядке с операцией O (n) здесь (как и у вас). Все остальное, вероятно, будет излишним.