javascript - 在 native JS 中使用 .map 保留对象键

标签 javascript

我想在使用 JavaScript 的 map 函数减少 CSV 数据集时保留对象键(如果这实际上是正确的方法?)

我已阅读 a top SO thread on preserving keys ,但给出的解决方案需要外部 JS 库(下划线或 lodash)。如果可能的话,我宁愿避免使用“vanila”JS 以外的任何东西。

例如:

var basket = [{fruit: "apple", veg: "carrot", nut: "peanut"},
 {fruit: "pear", veg: "lettuce", nut: "pistachio"},
 {fruit: "banana", veg: "radish", nut: "pecan"},
 {fruit: "kiwi", veg: "kale", nut: "almond"}]

产生一个包含 3 个对象的数组,对应于上面的每个“食物类型”条目(水果、蔬菜、坚果)。

我不想要坚果,所以我尝试使用 map 将它们过滤掉:

var small_basket = basket.map(function(item){
  return [
item.fruit,
item.veg
  ]
});

此方法返回一个包含 4 个数组的数组,对应于我列表中每种食物类型的每个项目,例如4 种水果和 4 种坚果(因此我们有效地消除了坚果)。

我的麻烦是:现在我的对象键不见了!相反,我的数组现在看起来像这样:

small_basket = Array(3) [
  0: Array(2) [
  0: "apple"
  1: "carrot"
]
  1: Array(2) [
  0: "pear"
  1: "lettuce"
]
  2: Array(2) [
  0: "bananna"
  1: "raddish"
]
]

我可以采取哪些不同的方式来保留对象键?

最佳答案

只返回另一个对象:

return {
  fruit: item.fruit,
  veg: item.veg
}

可以简写为:

 array.map(({ fruit, veg }) => ({ fruit, veg }))

或者如果您不想重复标识符:

 const pick = (key, ...rest) => obj => key ? ({ [key]: obj[key], ...pick(...rest)(obj) }): {};
 array.map(pick("fruit", "veg"))

或者将提取转化为移除:

 array.map(({ nut, ...rest }) => rest)

关于javascript - 在 native JS 中使用 .map 保留对象键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55534284/

相关文章:

javascript - 使用 Javascript 动态创建表单

javascript - 内容未在选项卡中加载

javascript - 计算给定多个开始和结束日期的唯一时间

javascript - 更新或更改预输入数据

javascript - 单击动态生成的图像时触发事件

javascript - 如何在 javascript 中捕获 ERR_CERT_AUTHORITY_INVALID

javascript - 使用 CSS3 向 DIV 添加倾斜背景

javascript - 使用 Auth0 和 Scaphold 的 GraphQL 登录

javascript - 在其他两个方法完成后调用一个方法

javascript - 在 Chart.js 中的条形顶部显示值