@etoleto

Как передать в функцию указатель к свойству объекта?

Есть некая функция, в которую передается объект и указатель к его свойству. И все было хорошо ровно до тех пор, пока не пришлось обратиться к свойству с таким указателем arr[i]['abc']['0']['bca']['0']['acb'];. Вопрос как передать в функцию такой указатель?

function ABC ( arr , spec){
for(i = 0; i < arr .length; i++) {
value=arr[i][spec];
console.log ( value );
}
}
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
Deonisius
@Deonisius
Родился в 11110110111 году, 11000 января.
Если у вас "arr" принимает массив объектов, а "spec" - свойство одного из объектов этого массива, то проблем не должно возникать:
function ABC(arr, spec) {
    for (i = 0; i < arr.length; i++) {
        if (arr[i].hasOwnProperty(spec)) {
            console.log(arr[i][spec]);
        }
    }
}

var arrOfObj = [{
    prop1: 'prop 0.1',
    prop2: 'prop 0.2'
}, {
    prop1: 'prop 1.1',
    prop2: 'prop 1.2'
}, {
    prop1: 'prop 1.2',
    prop2: 'prop 2.2'
}];

ABC(arrOfObj, 'prop1');
В ином случае, скорее всего, что не учитывается структура массива/объекта и т.д.

UPD Пример в песочнице
function checkProp(o, s) {
    for (var i = 0; i < s.length; i++) {
        if ((Array.isArray(o) && typeof o[s[i]] === 'undefined') ||
            (typeof o === 'object' && !o.hasOwnProperty(s[i]))) {
            return false;
        } else {
            o = o[s[i]];
        }
    }
    return o;
}

function ABC(arr, spec) {
    var value;
    for (var i = 0; i < arr.length; i++) {
        if (value = checkProp(arr[i], spec)) {
            console.log(value);
        }
    }
}

var arrOfObj = [{
    prop1: [{
        abc: 'ABC1'
    }, {
        def: [
            100500, {
                ghi: 'GHI1'
            }
        ]
    }],
    prop2: 'prop 0.2'
},
{
    prop1: [{
        abc: 'ABC2'
    }, {
        def: [
            100500, {
                ghi: 'GHI2'
            }
        ]
    }],
    prop2: 'prop 0.2'
}];

ABC(arrOfObj, ['prop1', 0, 'abc']); // ABC1, ABC2
ABC(arrOfObj, ['prop1', 1, 'def', 1, 'ghi']); // GHI1, GHI2
Ответ написан
Ваш ответ на вопрос

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

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