如何将键值对添加到对象?

时间:2018-05-11 18:48:58

标签: javascript typescript

我有一个dates数组,我正在尝试使用键/值对创建一个对象。月份名称将是键,日期将是值。

在下面的代码中,它打印一个空对象。知道缺少什么来实现:

{
  'may': ['2018/05/24', '2018/05/30']
}

main.ts

const arr = ["2018/05/24","2018/05/30"]    
private buildObject(obj) {
        const _obj = obj;
        let dateObject = {};
        _obj.forEach((element) => {
            const d = new Date(element);
            const m = monthNames[d.getMonth()];
            for (const key in dateObject){

                if (_obj) {
                    dateObject[key] = Object.assign({}, {[m]: element});
                }
            }

        })

        console.log("____DATES", dateObject);
        return dateObject;
    }

console.log(this.buildObject(arr));

2 个答案:

答案 0 :(得分:2)

这段代码有各种各样的错误。

  • 循环将永远不会执行,因为您的对象是空的。
  • if语句是不必要的,因为_obj始终是一个数组。
  • 列表项Object.assign({}, {[m]: element});不必要地将新对象合并到空对象中。它与编写{[m]: element}
  • 相同

由于您无法解释输出应该是什么,我只能假设您要将月份名称映射到日期的列表。以下代码执行此操作:



const monthNames = {4: "May"};
const arr = ["2018/05/24","2018/05/30"];
const dateObject = {};

for (const dateString of arr) {
  const date = new Date(dateString);
  const month = monthNames[date.getMonth()];
  if (dateObject[month]) {
    dateObject[month].push(dateString);
  } else {
    dateObject[month] = [dateString];
  }
}
console.log(dateObject);




广义"分组"功能:

function groupBy(arr, keyFunc) {
  const result = {};
  for (const value of arr) {
    const key = keyFunc(value);
    if (result[key]) {
      result[key].push(value);
    } else {
      result[key] = [value];
    }
  }
  return result;
}

用作

const dateObject = groupBy(
  arr,
  dateString => monthNames[new Date(dateString).getMonth()],
);

答案 1 :(得分:0)

您只需要遍历传入的数组。



const arr = ["2018/05/24","2018/05/30"]    
function buildObject(obj) {
        
        let dateObject = {};
        obj.forEach(function(element) {
            let d = new Date(element);
            let mounth =  d.toLocaleString("en-us", { month: "long" });
            dateObject[mounth] ? dateObject[mounth].push(element) :dateObject[mounth]= [element];
        })  
        return dateObject;
    }
console.log(buildObject(arr));