【问题标题】:Maping/filtering object keys from an object to a new object in Javascript在Javascript中将对象键从对象映射/过滤到新对象
【发布时间】:2025-12-18 17:40:01
【问题描述】:

我有一个名为revenue的对象:

var revenue = {
    "Month": "2011-01",
    "Week1_Revenue": "123.02",
    "week2_Revenue": "330.51",
    "Week3_Reenue": "201.98",
    "Month1_TotalRevenue": "700.12"
};

我想过滤和/或映射一些属性到一个新对象:

var filtered = {
    "Month": "2011-01",
    "Week1_Revenue": "123.02",
    "Month1_TotalRevenue": "700.12"
};

我想专门过滤MonthWeek1_RevenueMonth1_TotalRevenue

我尝试了一些东西,但它告诉我.map 不是一个函数。最初,该对象是一个字符串,所以我在其上调用了JSON.parse()

var revenueMod = revenue.map(item => {
    return {
        "date": item['Month'],
        "w1_revenue": item['Week1_Revenue'],
        "total_revenue": item['Month1_Revenue']
    };
});

【问题讨论】:

  • "Month"="2011-01" 澄清一下,这是不是应该是 "Month":"2011-01" 的错字?
  • 是的,这就是我的意思,但我修复了它
  • map 是一个数组方法,revenue 是一个对象。请阅读文档以获取更多信息。
  • .map() 在这里不是一个函数,因为revenue 不是一个数组,它是一个对象。您必须将对象包装在[](首选)中,但如果您无法控制该对象,只需测试它是否为数组,如果不是,则直接使用revenue["Month"] 等访问

标签: javascript arrays object variables


【解决方案1】:

map() 是一个数组方法,revenue 是一个对象。您可以像这样简单地获取新对象:

var revenue = { "Month": "2011-01", "Week1_Revenue": "123.02", "week2_Revenue": "330.51", "Week3_Reenue": "201.98", "Month1_TotalRevenue": "700.12"};

var filtered = {
  'Month': revenue['Month'],
  'Week1_Revenue': revenue['Week1_Revenue'],
  'Month1_TotalRevenue': revenue['Month1_TotalRevenue']
};

console.log( filtered )

【讨论】:

  • 冒着迂腐的风险,这里不需要Object.assign 调用,因为它的第二个参数已经是一个新对象。
  • 所以我尝试了这个,它给了我 undefined 在我这边,因为最初在创建这个数组之前,我解析了它,因为它是一个字符串数组。
  • 这个演示中的revenue 是否与在字符串响应中使用JSON.parse() 后得到的相同?
  • 演示正在运行,但在我这边它给了我未定义。
  • 我修好了,当我做一个 JSON.parse 时它仍然是一个字符串,所以我做了另一个 JSON.parse,它成功了!
【解决方案2】:

Map 确实不是一个函数,因为收入不是一个数组——它是一个对象。

这就是你想要做的吗?

var revenueMod = {
  date: revenue['Month'],
  w1_revenue: revenue['Week1_Revenue'],
  total_revenue: revenue['Month1_Revenue']
}

完全不使用地图功能。

【讨论】: