将Javascript数组缩减为映射并删除重复值
我相信有一个干净的方法可以做到这一点,但我不知道如何做到这一点。我想删除一列,这样我只返回第一次出现的值,但我想保留与它一起出现的键 我有一个数据集,我想减少。我想拔出“precip” 假设我有这个:将Javascript数组缩减为映射并删除重复值,javascript,arrays,dictionary,reduce,Javascript,Arrays,Dictionary,Reduce,我相信有一个干净的方法可以做到这一点,但我不知道如何做到这一点。我想删除一列,这样我只返回第一次出现的值,但我想保留与它一起出现的键 我有一个数据集,我想减少。我想拔出“precip” 假设我有这个: [ "2019-01-01" => {"temp" : "cold", "season" : "winter", "precip" : "snow"}, "2019-02-01" => {"temp" : "cold", "season" : "winter", "precip
[
"2019-01-01" => {"temp" : "cold", "season" : "winter", "precip" : "snow"},
"2019-02-01" => {"temp" : "cold", "season" : "winter", "precip" : "none"},
"2019-03-01" => {"temp" : "mild", "season" : "spring", "precip" : "rain"},
"2019-04-01" => {"temp" : "mild", "season" : "spring", "precip" : "none"},
"2019-05-01" => {"temp" : "warm", "season" : "spring", "precip" : "rain"},
"2019-06-01" => {"temp" : "warm", "season" : "summer", "precip" : "hail"},
"2019-07-01" => {"temp" : "hot", "season" : "summer", "precip" : "none"}
]
最后,我想说:
[
"2019-01-01" => "snow",
"2019-02-01" => "none",
"2019-03-01" => "rain",
"2019-06-01" => "hail"
]
我认为Array.map与此有关,但我不知道如何返回键/值对,而不仅仅是一个值(即map(函数(d){return d.precip})
)
做这件事的顺利方法是什么
提前感谢。您可以迭代主对象的键,并创建一个新对象,该对象将使用这些键,并将
precip
属性值指定为新key=>值对的值:
var日期={
“2019-01-01”:{“温度”:“寒冷”,“季节”:“冬季”,“降水”:“雪”},
“2019-02-01”:{“温度”:“寒冷”,“季节”:“冬季”,“降水”:“无”},
“2019-03-01”:{“温度”:“温和”,“季节”:“春季”,“降水”:“雨水”},
“2019-04-01”:{“温度”:“温和”,“季节”:“春季”,“精度”:“无”},
“2019-05-01”:{“温度”:“温暖”,“季节”:“春天”,“降水”:“雨水”},
“2019-06-01”:{“温度”:“温暖”、“季节”:“夏季”、“降水”:“冰雹”},
“2019-07-01”:{“温度”:“炎热”,“季节”:“夏季”,“降水”:“无”}
};
var result=Object.keys(dates).reduce((k,d)=>{return[…k,{[d]:dates[d].precip}]},[]))
console.log(result)
您可以创建一个控制台,并仅获取具有相同密钥的第一项
函数getFirstPrecip(数据){
返回Object.assign({},…Array.from)(
数据减少((m,o)=>{
var[[k,{precip}]]=Object.entries(o);
返回m.has(precip)?m:m.set(precip,k);
},新地图),
([k,v])=>({[v]:k})
));
}
var数据=[{2019-01-01]:{temp:“冷”,季节:“冷”,precip:“雪”},{2019-02-01:{temp:“冷”,季节“冷”,季节“冷”,precip:“无”},{2019-03-01:{temp:“温和”,季节“春”,precip:“无”},{2019-05-01:{temp:“温暖”,季节“春”,precip:“雨”},{“2019-06-01”:{temp:“温暖”,季候:“夏季”,precip:“冰雹”},{“2019-07-01”:{temp:“炎热”,季候:“夏季”,precip:“无”}];
日志(getFirstPrecip(数据))代码>地图是什么意思?数组或映射
?请注意,由于语法无效,很难准确地说出您正在使用的是什么。现在有两个答案,两个都做出了不同的假设,我道歉。在标题中,我指的是地图(对象)。在本文中,我引用了数组映射函数。请为数据和结果添加有效的数据结构/类型,以便我尝试将其用于我的代码,但遇到了问题。我注意到在var data
声明后有一个逗号,然后直接进入代码。如果这段代码在函数中,并且数据
是作为参数传递的数组,您将如何更改它?我有一个问题让这变得有点困难。如果日期在键值对内(比如说“date:“2019-07-01”
),并且我希望结果相同,该怎么办?那么,如何从键值对中提取日期并使其成为返回数据集的新键呢?您只需替换{[d]:dates[d].precip}
,其中d
是日期键,对于{[dates[d].date]:dates[d].precip}
使用从对象中的另一个值提取的新密钥。您可以通过替换[d]
中的[dates[d].temp]
来尝试上述代码,以从对象中的temp和precip值中获得一对密钥:值。