Lodash 搜索对象属性并修改值
Lodash searching object properties and modifying value
我试图遍历一个对象,寻找数组中定义的值。这些属性通常是带有纪元时间戳的属性。
找到 属性 后,我想将该属性的值转换为人类可读的值。
may myArray = ["dob", "movingDate"];
var myObj = {
prop1: "hi",
prop2: "goodnight",
prop3: "welcome",
prop4: "now",
name: "Alfred",
age: 46,
dob: 3165300688,
gender: "female",
movingDate: 1461233587
}
for (var i = 0; i < myArray.length; i++) {
var exists = _.has(myObj, myArray[i]);
}
哪个可以正确找到属性(如果存在),但如何获取属性值?
我可以使用标准 Object.Keys
表示法修复上述问题,但我正在尝试使用 lodash
和 moment
.
获得 属性 后,我可以使用 moment 通过以下方式进行转换:
prop = moment.format('DD-MM-YY HH:mm:ss.SSS');
我应该使用:
_.pick
或者:
_.update
你在这里甚至不需要 lodash,简单的 forEach
和 in-operator 来测试 属性 存在就足够了:
myArray.forEach(function(value) {
if (value in myObj) {
myObj[value] = moment.unix(myObj[value]).format('DD-MM-YY HH:mm:ss.SSS');
}
});
你可以通过简单的
得到属性值
myArray.forEach(function(val){
if ( myObj.hasOwnProperty(val) )
{
myObj[val] = formatDate(myObj[val]);
}
});
假设您有一个方法 formatDate 可以使用 moment(或任何您喜欢的库)将时间戳格式化为日期格式
你可以这样做:
function formatDate(val) { return new Date(val); }
_.assign({}, myObj,
_(myObj)
.pick(myArray)
.mapValues(formatDate)
.value());
请注意,调用 assign() 实际上会创建一个新对象,而不是改变 myObj
。这是因为第一个参数 - {}
。如果您需要修改 myObj
引用,只需删除第一个参数。
分配的值是根据 myArray
和 pick(). Since this returns an object, we want to use the mapValues() 函数选择值的结果,用于格式化日期 - formatDate()
函数可以 return 任何东西。
我试图遍历一个对象,寻找数组中定义的值。这些属性通常是带有纪元时间戳的属性。
找到 属性 后,我想将该属性的值转换为人类可读的值。
may myArray = ["dob", "movingDate"];
var myObj = {
prop1: "hi",
prop2: "goodnight",
prop3: "welcome",
prop4: "now",
name: "Alfred",
age: 46,
dob: 3165300688,
gender: "female",
movingDate: 1461233587
}
for (var i = 0; i < myArray.length; i++) {
var exists = _.has(myObj, myArray[i]);
}
哪个可以正确找到属性(如果存在),但如何获取属性值?
我可以使用标准 Object.Keys
表示法修复上述问题,但我正在尝试使用 lodash
和 moment
.
获得 属性 后,我可以使用 moment 通过以下方式进行转换:
prop = moment.format('DD-MM-YY HH:mm:ss.SSS');
我应该使用:
_.pick
或者:
_.update
你在这里甚至不需要 lodash,简单的 forEach
和 in-operator 来测试 属性 存在就足够了:
myArray.forEach(function(value) {
if (value in myObj) {
myObj[value] = moment.unix(myObj[value]).format('DD-MM-YY HH:mm:ss.SSS');
}
});
你可以通过简单的
得到属性值myArray.forEach(function(val){
if ( myObj.hasOwnProperty(val) )
{
myObj[val] = formatDate(myObj[val]);
}
});
假设您有一个方法 formatDate 可以使用 moment(或任何您喜欢的库)将时间戳格式化为日期格式
你可以这样做:
function formatDate(val) { return new Date(val); }
_.assign({}, myObj,
_(myObj)
.pick(myArray)
.mapValues(formatDate)
.value());
请注意,调用 assign() 实际上会创建一个新对象,而不是改变 myObj
。这是因为第一个参数 - {}
。如果您需要修改 myObj
引用,只需删除第一个参数。
分配的值是根据 myArray
和 pick(). Since this returns an object, we want to use the mapValues() 函数选择值的结果,用于格式化日期 - formatDate()
函数可以 return 任何东西。