JSFiddle - React, Tailwind, and code Playground

JavaScript

var haystackObj = {
    'needle': 'abc',
    'prop2': {
        'prop1': 'def',
        'prop2': {
            'needle': 'ghi'
         },
         'needle': 'jkl'
     },
};
var needleKey = 'needle';
var currIndex = 0;
var valuesArray = [];

var loadValues = function (obj) {
    var objToSearch = obj || haystackObj;
    for (var x in objToSearch) {
        if (x == needleKey) {
            valuesArray.push(objToSearch[x])
        } else if (typeof objToSearch[x] == 'object') {
            loadValues(objToSearch[x]);
        }
    }
}

loadValues();
console.log(valuesArray);
var iterator = {
    next: function () {
        return valuesArray[currIndex++];
    }
};

var value = iterator.next();
console.log(value); // -> 'abc'
value = iterator.next();
console.log(value); // -> 'ghi'
value = iterator.next();
console.log(value); // -> 'jkl'