@ilya2306

Как получить родителя объекта (jquery/javascript)?

Функция поиска строки внутри объекта
function search(obj){
    for (var keys in obj){
        if(typeof obj[keys] = "object"){
            search (obj[keys]);
        else{
            if(obj[keys] === text)
                console.log(text, " найден в объекте ", ИМЯ РОДИТЕЛЯ);
        }
    }
}


Имеется объект:
obj:{
    a:{
        a_val1:{
            a_val1_a: "some text"
        },
        a_val2:"text"
    },
    b:{
        b_val1:{
            b_val1_a: "one more",
            b_val2_a: "one more2"
        }
        b_val2: "this is string"
    }
}    

var text = "text";

search (obj);

Т.е. в результате работы функции мы находим a_val2 === "text". Надо вывести в консоль "a"

Заранее спасибо!
  • Вопрос задан
  • 3494 просмотра
Пригласить эксперта
Ответы на вопрос 3
CTAKAH4uK
@CTAKAH4uK
function search(obj, parent){
    for (var keys in obj){
        if(typeof obj[keys] = "object"){
            search (obj[keys],obj);
        else{
            if(obj[keys] === text)
                console.log(text, " найден в объекте ", parent);
        }
    }
}
Ответ написан
Комментировать
Сделать это у Вас получится в функции обхода. Она знает весь путь по которому ищет "text", она имеет представление об объекте который обходит.

смотрите что у вас на выходе на последней итерации search. Входной параметр obj и есть родитель. Но чтобы протянуть имя родителя по рекурсии Вам придется в search кроме obj передавать key ему соответствующий.

function search(obj, name){
    for (var keys in obj){
        if(typeof obj[keys] = "object"){
            search (obj[keys], keys);
        else{
            if(obj[keys] === text)
                console.log(text, " найден в объекте ", name);
        }
    }
}
Ответ написан
Комментировать
@sergeysmishin
var origObj = {
        a: {
            a_val1: {
                a_val1_a: "some text"
            },
            a_val2: "text"
        },
        b: {
            b_val1: {
                b_val1_a: "one more",
                b_val2_a: "one more2"
            },
            b_val2: "this is string"
        }
    }

    var text = "one more2";

    function search(obj, path) {

        obj._path = path;

        for (var key in obj) {

            if (!obj.hasOwnProperty(key) || key === '_path') {
                continue;
            }

            obj[key]._path = (obj._path + "." + key);

            if (typeof obj[key] === "object") {
                search(obj[key], obj[key]._path);
            }
            else if (obj[key] === text) {
                console.log(text, " найден в объекте: " + obj._path + " , свойсво: " + key);
            }

        }

    }

    search(origObj, "origObj");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы