获取给定单词的对象中的所有字段并转换这些字段的所有值

时间:2017-07-07 13:09:18

标签: javascript string date object properties

我有object。像这样,例如

{
    startDate: 2141242141,
    adress: '',
    endDate: 2141242141,
    billings: {
        startBillingDate: 2142421421421,
        endBillingDate: 2142421421421
    }
    amount: 100
}

我需要获取包含“Date”(或“date”)字样的所有字段,并将它们全部转换为字符串日期格式。

谁可以帮忙。

3 个答案:

答案 0 :(得分:4)

您可以使用Object.keys()循环访问这些属性。

并为每个property检查其值是否为object并使用date包含k.match(/date/i)字符串,因此请将其更改为date值。否则,如果它是一个对象,则以递归方式对其属性执行相同的操作。

这就是你需要的:

function transformProperties(obj) {
  Object.keys(obj).forEach(function(k) {
    if ((typeof obj[k]) !== "object" && k.match(/date/i)) {
      obj[k] = new Date(obj[k]);
    } else if ((typeof obj[k]) == "object") {
      let sub = obj[k];
      transformProperties(sub);
    }
  });
}

<强>演示:

var o = {
  startDate: 2141242141,
  adress: '',
  endDate: 2141242141,
  billings: {
    startBillingDate: 2142421421421,
    endBillingDate: 2142421421421
  },
  amount: 100
};

function transformProperties(obj) {
  Object.keys(obj).forEach(function(k) {
    if ((typeof obj[k]) !== "object" && k.match(/date/i)) {
      obj[k] = new Date(obj[k]);
    } else if ((typeof obj[k]) == "object") {
      let sub = obj[k];
      transformProperties(sub);
    }
  });
}

transformProperties(o);

console.log(o);

答案 1 :(得分:0)

此递归函数应将所有日期转换为ISO字符串:

obj = convertDatesToString(obj);

function convertDatesToString(obj) {
    Object.keys(obj).forEach((key) => {
        if(key.toLowerCase().match(/date/)){
            obj[key] = new Date(obj[key]).toISOString();
        } else if (obj[key] instanceof Object) {
            obj[key] = convertDatesToString(obj[key]);
        }
    });

    return obj;
}

obj = {
    startDate: 2141242141,
    adress: '',
    endDate: 2141242141,
    billings: {
        startBillingDate: 2142421421421,
        endBillingDate: 2142421421421
    },
    amount: 100
};

obj = convertDatesToString(obj);
console.log(obj);

function convertDatesToString(obj) {
    Object.keys(obj).forEach((key) => {
        if(key.toLowerCase().match(/date/)){
            obj[key] = new Date(obj[key]).toISOString();
        } else if (obj[key] instanceof Object) {
            obj[key] = convertDatesToString(obj[key]);
        }
    });

    return obj;
}

答案 2 :(得分:0)

我会创建一个递归迭代对象属性的函数,稍后我会调用整个函数来生成整个转换:

&#13;
&#13;
function forEachProperty(obj, actionFn) {
  Object.keys(obj).forEach(
    property => {
      actionFn(obj, property);

      if (typeof obj[property] == "object") {
        forEachProperty(obj[property], actionFn);
      }
    }
  );
}

var obj = {
  startDate: 2141242141,
  adress: '',
  endDate: 2141242141,
  billings: {
    startBillingDate: 2142421421421,
    endBillingDate: 2142421421421
  },
  amount: 100
};

forEachProperty(obj, (obj, property) => {
  if (property.toLowerCase().includes("date")) {
    obj[property] = new Date(obj[property]);
  }
});

console.log(JSON.stringify(obj));
&#13;
&#13;
&#13;