javascript - 尝试自定义平面图 es2017 Javascript 时遗留的数组
问题描述
尝试使用 reduce 和 concat 实现自定义平面图时,我得到了一个剩余的数组。我必须使用 reduce concat 组合,因为 flatmap 在 es2017 中不起作用,因为我需要使用 es2017。
我的代码:
function flat(object) {
return Object
.entries(object)
.reduce((acc,[k, v]) => acc.concat([k, ...v.map((s) => `${s} ${k}`)]));
}
var data = { message: { arctic: [], atlantic: ["north", "south"], indian: [], pacific: ["north", "south"], southern: [] } },
result = { message: flat(data.message) };
console.log(result);
我的结果:
{
message:(10) [
"arctic",
[],
"atlantic",
"north atlantic",
"south atlantic",
"indian",
"pacific",
"north pacific",
"south pacific",
"southern"
]
}
我需要的:
{
message:(9) [
"arctic",
"atlantic",
"north atlantic",
"south atlantic",
"indian",
"pacific",
"north pacific",
"south pacific",
"southern"
]
}
解决方案
您需要将空数组的初始值传递给reduce
,否则acc
reduce 中的第一个值将是对象的第一个条目(并且对象的第一个条目是['arctic', []]
。但是您希望所有键值对都具有映射逻辑(连接键,然后连接键的数组可能具有的任何值)应用于它们,您不想排除第一项:
function flat(object) {
return Object
.entries(object)
.reduce((acc, [k, v]) => acc.concat([k, ...v.map((s) => `${s} ${k}`)]), []);
// ---------------------------> ^^
}
var data = {
message: {
arctic: [],
atlantic: ["north", "south"],
indian: [],
pacific: ["north", "south"],
southern: []
}
},
result = {
message: flat(data.message)
};
console.log(result);
推荐阅读
- java - 一旦 Hashtable 对象分配给相同的 Enumeration 对象,索引就会失败
- c# - 动态创建 Webservice 的 datacontract
- angular - value 属性的属性绑定
- intellij-idea - IntelliJ IDEA - Enter 无法在 Search Everywhere 中打开文件
- javascript - 如何在 React JS 中设置环境变量..?
- grafana - 无法添加 influxdb 数据源 grafana - 网络错误:未定义(未定义)
- python - 如何使用 pycurl 解决这个 curl 调用?
- api - 生命周期 API 授权 - OutSystems
- kentico - Kentico ResHelper.GetString 返回错误的翻译
- php - GuzzleHTTP Post 请求正文包含查询