Я не могу понять, почему я получаю undefined
в моей консоли ...Почему я получаю неопределенное значение, если значение определено? используя eval()
Каждый объект, который повторяется, имеет определенное свойство.
Где я ошибся?
коллекция выглядит следующим образом:
var a = [
{
city: 'Tucson',
state: 'AR',
zipcode: 85701
},
{
city: 'Orlando',
state: 'FL',
zipcode: 32828
},
{
city: 'Apopka',
state: 'FL',
zipcode: "32703",
},
{
city: 'Compton',
state: 'CA',
zipcode: 90220
}
];
вот функция:
function reduce(collection, condition){
var map = [];
for (let v in collection){
var cl = [], r, e, matches, m;
if ('string' === typeof condition) {
r = new RegExp(/([\w]+)\s*?(?=(>|<|>=|<=|==|===|!=|!==))/g);
matches = condition.match(r);
var nm = condition;
matches.forEach(function(m, index){
// outputs state console.log(m);
nm = nm.replace(m, (collection[v][String(m)]) + ' ');
console.dir(collection[v]);
console.dir(m + " replaced by " + collection[v][m] + ", gets you: " + nm);
});
cl.push(m);
//if (eval(condition) === true) { map.push(collection[v]); }
} else if ('object' === typeof condition){
for (let c in condition){
r = new RegExp("(" + collection[v][c] + ")*(>|<|>=|<=|==|===|!=|!==)", "g");
e = condition[c];
matches = condition[c].match(r);
if (0 < matches.length) {
matches.forEach(function(m, index){
if (condition[c].indexOf(c) === -1) {
e = e.replace(m, ((typeof collection[v][c] === 'string') ? "'" + collection[v][c] + "'" : collection[v][c]) + " " + m);
}
});
};
cl.push(e);
}
if (eval(cl.join(" && ")) === true) { map.push(collection[v]); }
};
console.log(cl.join(" && "));
}
return map;
}
...
и вот вызов:
var floridians = reduce(a, "state == 'FL'");
Спасибо заранее, ребята!
Я думаю, вы должны конкретно сказать, что кажется неопределенным. – Jonast92
Просто вопрос, это их истинная причина, что вы * слишком усложняете вещь? Вы в основном переписываете Array.prototype.filter() – Cohars
.... и переопределяете значение 'reduce', для которого существует' Array.prototype.reduce() ' – Jamiec