用普通的 for 循环替换下划线或 lodash _.each
Replacing underscore or lodash _.each with vanilla for loop
我想替换以下代码以不再依赖 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;
});
};
理想情况下,我想使用普通的 JavaScript for 循环,但我不明白 underscore/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'
});
所以,如果我正确地解释了你的逻辑,你要做的就是遍历你的默认对象中的键,如果你正在检查的对象没有那个键,你想要将该键添加到对象并将其值分配给默认值,是否正确?对浏览器级别有任何限制吗?
如果您确定默认数据对象是什么样子,最快的方法是使用 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),那么您需要付出更多努力来确定键的存在和值的类型。但根据你的例子,你并不担心。
试试这个:
Object.keys(dataDefault).forEach(function (key) {
var value = dataDefault[key]
// iteration code
})
对于 for..in,您必须使用 hasOwnProperty 来排除继承属性。
我想替换以下代码以不再依赖 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;
});
};
理想情况下,我想使用普通的 JavaScript for 循环,但我不明白 underscore/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'
});
所以,如果我正确地解释了你的逻辑,你要做的就是遍历你的默认对象中的键,如果你正在检查的对象没有那个键,你想要将该键添加到对象并将其值分配给默认值,是否正确?对浏览器级别有任何限制吗?
如果您确定默认数据对象是什么样子,最快的方法是使用 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),那么您需要付出更多努力来确定键的存在和值的类型。但根据你的例子,你并不担心。
试试这个:
Object.keys(dataDefault).forEach(function (key) {
var value = dataDefault[key]
// iteration code
})
对于 for..in,您必须使用 hasOwnProperty 来排除继承属性。