首页 文章

用vanilla for循环替换下划线或lodash _.each

提问于
浏览
3

我想要替换以下代码,不再依赖于underscore.js或lodash.js的 _.each() 函数:

function fset(data) {
    _.each(dataDefault, function(item, key) {
        var val = ( data[key] ? data[key] : dataDefault[key] );
        $rootScope.meta[key] = val;
    });
};

理想情况下,我想使用一个vanilla JavaScript for循环,但我不明白下划线/ lodash中的 _.each() 函数如何替换它...

就像是:

for(var i=0; i<data.length;i++) {
    var val = ( data[key] ? data[key] : dataDefault[key] );
    $rootScope.meta[key] = val;
}

但是,我不知道如何以这种方式得到钥匙和物品......

dataDefault 看起来像:

var dataDefault = {
    title: null,
    description: null
};

调用该函数的一个例子是:

meta.fset({
    title: 'Hello world',
    description: 'DESC'
});

2 回答

  • 3

    所以,如果我正确地解释你的逻辑,你要做的是循环你的默认对象中的键,如果你正在检查的对象没有那个键,你想要将该键添加到对象并将其值赋值为默认值,这是正确的吗?浏览器级别的任何限制?

    如果您确定默认数据对象的样子,最快捷的方法是使用 for..in 循环:

    var data = {}; // or wherever you get it from)
    for (var key in defaultData){
       data[key] = data[key] || defaultData[key];
    }
    

    这假设 data.key 非空且非假 . 如果false或null是有效值(并且您的默认值不为null或false),那么您并不担心这一点 .

  • 1

    试试这个:

    Object.keys(dataDefault).forEach(function (key) { 
        var value = dataDefault[key]
        // iteration code
    })
    

    使用for..in,您必须使用hasOwnProperty来排除继承属性 .

相关问题