如果定义了值,为什么会得到一个未定义的值?使用 eval()
Why do I get an undefined value if the value is defined? using eval()
我不太明白为什么我的控制台会出现undefined
...
要迭代的每个对象都定义了该属性。
我哪里做错了??
集合如下所示:
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'");
提前感谢伙计们!
你得到undefined
的原因是因为你的变量m
(你认为它包含字符串"state")有一个尾随空格。在方括号表示法中使用以读取对象的属性时,这将返回undefined
.
这是使用良好的老式调试发现的: https://jsfiddle.net/wLs3o9mk/- 您对console.dir
的使用掩盖了问题,它似乎折叠了多个空格(如 HTML)。当更改为没有console.log
时,它变得非常明显。
相关文章:
- 同一项怎么可能在一个实例中未定义,却在另一个实例上定义
- DOM导航-上一个同级未定义
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 为什么我得到了一个“;未定义的“;使用“”从Find()返回值;这个“;论点
- 变量转换为另一个“未定义”的变量
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 反应.js:未捕获类型错误:未定义不是一个函数
- jQuery onclick 函数:未定义不是一个函数
- JS在隐藏未定义的值后仅从数组中返回第一个id的值
- 所以这是说我的法定对象中有一个未定义的变量
- 未定义不是一个函数,谷歌地理定位
- 谷歌URL缩短器API-未压缩类型错误:未定义不是一个函数
- 为什么在这个数组的末尾会有一个未定义的
- 从一个函数传递到另一个函数的变量在使用jQuery的.post之后变得未定义
- JSON.parse给出了一个“;未定义的“;对象
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 使用while循环在printArray函数中获取一个额外的未定义值
- 为什么我得到一个未定义的回报
- Argument Controller不是一个函数,未定义-一个页面中有两个Angular应用程序
- 尝试执行两个函数递归时,未定义一个函数