我想在使用 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/