递归转换""在使用下划线的对象中为false
Recursively convert "" to false in object using underscore
我试图将所有""
值转换为false
使用下划线,它不工作。有更简单的方法吗?
var _ = require("underscore");
var test = {
"one": "",
"two": "",
"three": {
"four": ""
},
"five": "this string is intact"
};
第一次尝试,弄乱了对象
function z(object){
return _.map(object, function(value, key, list){
if(_.isObject(value)){
return z(value);
}else{
var ret = {};
ret[key] = (value == "") ? false : value;
return ret;
}
});
}
第二次尝试失败
var _false = function(object){
var nb = {};
var _false = function _false(object, parent){
_.each(object, function(value, key, list){
if(_.isObject(value)){
nb[key] = {};
return _false(value, key);
}else{
nb[parent] = (value == "") ? false : value;
}
});
}(object);
return nb;
}
如果你想修改你的对象,你必须去做!
function z(object){
_.each(object, function(value, key){
if(_.isObject(value)){
z(value);
}else{
object[key] = (value === "") ? false : value;
}
});
}
直接修改你的对象,而不是创建一个新的对象。
_.map()
的问题是,它总是返回数组。如果你想以一个对象结束,就像原来的那样,你不能使用它。
为什么需要使用下划线?对于/in,使用纯JS可能更容易。
http://jsfiddle.net/dSZbe/// Accepts an object to convert '' -> false
var falsify = function(obj) {
// for each key in the object
for (var key in obj) {
// store the value for this key in a local variable
var value = obj[key];
// if the value is an empty string
if (value === '') {
// update the object, change the value of this key to false
obj[key] = false;
// Value is not empty string.
// So is it an object?
} else if (typeof value === 'object') {
// It IS an object! that means we need to do all this again!
// This is what makes this recursive
falsify(value);
}
}
// return the modified object, though the object passed
return obj;
};
// test data
var test = {
"one": "",
"two": "",
"three": {
"four": ""
},
"five": "this string is intact"
};
// proof it works, all empty strings are now `false`.
alert(JSON.stringify(falsify(test)));
但最后,确保你需要这样做…""
在JavaScript中是一个假值。这意味着:
var emptyString = "";
if (emptyString) {
// never gonna happen
} else {
// always gonna happen
}
所以如果你只是想写像if (test.one) { ... }
这样的代码,那么你根本不需要这样做
相关文章:
- "“;变量未引用正确的对象
- 如何创建js常量对象与"依赖/相对;价值观
- "属性描述必须是对象“”;错误
- 获取"下一个“;对象中的数值
- 得到"TypeError:对象不是函数“”;在forEach循环中使用超级测试/超级代理时
- "键“;jQuery中的对象无法正常工作
- 为什么下面抛出一个“;对象没有't支持属性或方法'importNode'"在IE11中
- "未捕获[对象对象]”;投掷和接球时
- "对象不是函数“;当将Node.js HTTP服务器对象传递给Socket.IO时
- 将对象设置为Backbone.js模型,而不必调用“;set()"在每一处房产上
- 得到"未捕获的类型错误:未定义的不是函数“;当试图从对象调用get()或set()时
- 获得错误“;对象没有方法'jScrollPane'"与AngularJS一起使用时
- "类型错误:'null'不是对象(正在评估“a.nodeType')”;在phanto
- "这个“;对象函数内部的引用
- "对象没有't支持这种性质或方法“;在IE 8中.在调试中执行精细
- "Function.createDelegate"原因;错误:对象没有't支持属性或方法
- 在javascript中,使用requireJS,我如何"要求“;typescript对象
- a href="上的javascript对象对象;javascript:"呼叫
- TypeError:undefined不是一个对象(正在评估'msg.innerHTML="Uploa
- "[对象对象]”;类型为String