Lodash搜索对象属性并修改值
Lodash searching object properties and modifying value
我正试图循环遍历一个对象,寻找数组中定义的值。这些属性通常是带有epoch时间戳的属性。
一旦找到一个属性,我想将该属性的值转换为可读的。
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
。
一旦我有了这个属性,我就可以使用即时转换通过:
prop = moment.format('DD-MM-YY HH:mm:ss.SSS');
我应该使用:
_.pick
或者:
_.update
您只需执行即可获得属性值
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()拾取值的结果。由于这返回了一个对象,我们希望使用mapValues()函数来格式化日期——formatDate()
函数可以返回任何内容。
这里甚至不需要lodash,简单的forEach
和in操作符来测试属性的存在就足够了:
myArray.forEach(function(value) {
if (value in myObj) {
myObj[value] = moment.unix(myObj[value]).format('DD-MM-YY HH:mm:ss.SSS');
}
});
相关文章:
- 如何通过JQuery修改样式属性
- 在运行时修改innerhtml属性
- 通过emberJS中的控制器修改组件的属性
- HTML&JS-如何修改CSS类的属性
- js添加封装来修改属性值
- 检查所有元素的属性并修改另一个元素
- 选择单选输入时修改占位符属性
- Lodash搜索对象属性并修改值
- 复选框的checked属性的修改不会;工作不正常
- JavaScript-我可以用for循环中修改的属性将新结构推送到数组中吗
- 修改时,哪些DOM元素属性会导致浏览器执行回流操作
- 有没有一种方法可以在一次调用中修改每个jquery对象的特定属性
- 从 React 中的自定义元素中修改属性
- AngularJS:修改指令中的transcluded属性键
- 如何使用 jQuery 修改属性 ROWSPAN
- 使用javascript修改属性文件
- 在jQuery中修改属性的最短方法
- 如何动态修改属性(onmouseover)
- Angular 在 forEach 或纯 For 时修改属性
- angularJS如何在指令中修改属性link