Replacing underscore or lodash _.each with vanilla for loop
我想替换以下代码,以不再依赖underline.js或lodash.js的
1 2 3 4 5 6 | function fset(data) { _.each(dataDefault, function(item, key) { var val = ( data[key] ? data[key] : dataDefault[key] ); $rootScope.meta[key] = val; }); }; |
理想情况下,我希望使用普通的javascript进行循环,但我不理解下划线/lodash中的
类似:
1 2 3 4 | for(var i=0; i<data.length;i++) { var val = ( data[key] ? data[key] : dataDefault[key] ); $rootScope.meta[key] = val; } |
但是,我不知道如何用这种方式获得钥匙和物品…
1 2 3 4 | var dataDefault = { title: null, description: null }; |
调用函数的一个例子是:
1 2 3 4 | meta.fset({ title: 'Hello world', description: 'DESC' }); |
试试这个:
1 2 3 4 | Object.keys(dataDefault).forEach(function (key) { var value = dataDefault[key] // iteration code }) |
对于中的for..In,必须使用HasOwnProperty排除继承属性。
所以,如果我正确地解释了您的逻辑,那么您要做的就是循环访问默认对象中的键,如果您要检查的对象没有该键,那么您需要将该键添加到对象中,并将其值赋给默认值,对吗?浏览器级别有限制吗?
如果您确定默认数据对象是什么样的,那么最快的方法是使用
1 2 3 4 | var data = {}; // or wherever you get it from) for (var key in defaultData){ data[key] = data[key] || defaultData[key]; } |
假设