Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将下划线或lodash替换为香草for循环_Javascript_Loops_Ecmascript 6_Underscore.js_Lodash - Fatal编程技术网

Javascript 将下划线或lodash替换为香草for循环

Javascript 将下划线或lodash替换为香草for循环,javascript,loops,ecmascript-6,underscore.js,lodash,Javascript,Loops,Ecmascript 6,Underscore.js,Lodash,我想替换以下代码,使其不再依赖underline.js或lodash.js的.each()函数: function fset(data) { _.each(dataDefault, function(item, key) { var val = ( data[key] ? data[key] : dataDefault[key] ); $rootScope.meta[key] = val; }); }; 理想情况下,我想使用一个普通的JavaSc

我想替换以下代码,使其不再依赖underline.js或lodash.js的
.each()
函数:

function fset(data) {
    _.each(dataDefault, function(item, key) {
        var val = ( data[key] ? data[key] : dataDefault[key] );
        $rootScope.meta[key] = val;
    });
};
理想情况下,我想使用一个普通的JavaScript for循环,但我不明白下划线/lodash中的
.each()
函数如何替换它

比如:

for(var i=0; i<data.length;i++) {
    var val = ( data[key] ? data[key] : dataDefault[key] );
    $rootScope.meta[key] = val;
}
调用该函数的示例如下:

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

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

如果您确实知道默认数据对象的外观,那么最快的方法是在循环中为..使用

var data = {}; // or wherever you get it from)
for (var key in defaultData){
   data[key] = data[key] || defaultData[key];
}
这假定
data.key
为非null和非false。如果false或null是一个有效值(默认值不是null或false),那么您需要更加努力地确定键的存在和值的类型。但根据你的例子,你并不担心

试试这个:

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

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

True,但并非所有浏览器都支持
forEach
Object.keys
。在他的例子中,没有任何继承财产需要担心。
Object.keys(dataDefault).forEach(function (key) { 
    var value = dataDefault[key]
    // iteration code
})