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

Cam*_*ron 5 javascript loops underscore.js ecmascript-6 lodash

我想替换下面的代码,不再依赖_.each()underscore.js或lodash.js的功能:

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

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

就像是:

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

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

dataDefault 好像:

var dataDefault = {
    title: null,
    description: null
};
Run Code Online (Sandbox Code Playgroud)

调用函数的一个例子是:

meta.fset({
    title: 'Hello world',
    description: 'DESC'
});
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 1

因此,如果我正确地解释了您的逻辑,那么您要做的就是循环默认对象中的键,如果您正在检查的对象没有该键,则需要将该键添加到对象并将其值分配给默认值,这是正确的吗?浏览器级别有限制吗?

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

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

假设data.key是非空且非假的。如果 false 或 null 是有效值(并且您的默认值不是 null 或 false),那么您需要付出更多努力来确定键的存在和值的类型。但根据你的例子,你并不担心这一点。