Javascript Lodash搜索对象属性并修改值

Javascript Lodash搜索对象属性并修改值,javascript,lodash,Javascript,Lodash,我试图在对象中循环,查找数组中定义的值。这些属性通常是带有历元时间戳的属性 一旦找到属性,我想将该属性的值转换为人类可读的值 may myArray = ["dob", "movingDate"]; var myObj = { prop1: "hi", prop2: "goodnight", prop3: "welcome", prop4: "now", name: "Alfred", age: 46, dob: 3165300688,

我试图在对象中循环,查找数组中定义的值。这些属性通常是带有历元时间戳的属性

一旦找到属性,我想将该属性的值转换为人类可读的值

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]);
}
我是否应该使用:

_.pick
或:


在这里,您甚至不需要lodash,简单的
forEach
测试属性的存在就足够了:

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方法,可以使用矩(或任何fav库)将时间戳格式化为日期格式,您可以执行以下操作:

function formatDate(val) { return new Date(val); }

_.assign({}, myObj,
  _(myObj)
    .pick(myArray)
    .mapValues(formatDate)
    .value());
请注意,对的调用实际上将创建一个新对象,而不是变异
myObj
。这是因为第一个参数-
{}
。如果需要修改
myObj
引用,只需删除第一个参数


分配的值是基于
myArray
和拾取值的结果。由于这会返回一个对象,我们希望使用函数来格式化日期,
formatDate()
函数可以返回任何内容。

不变性无疑是一种方法+1.
myArray.forEach(function(val){
  if ( myObj.hasOwnProperty(val) )
  {
    myObj[val] = formatDate(myObj[val]);
  }
});
function formatDate(val) { return new Date(val); }

_.assign({}, myObj,
  _(myObj)
    .pick(myArray)
    .mapValues(formatDate)
    .value());