Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Javascript数组缩减为映射并删除重复值_Javascript_Arrays_Dictionary_Reduce - Fatal编程技术网

将Javascript数组缩减为映射并删除重复值

将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

我相信有一个干净的方法可以做到这一点,但我不知道如何做到这一点。我想删除一列,这样我只返回第一次出现的值,但我想保留与它一起出现的键

我有一个数据集,我想减少。我想拔出“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值中获得一对
密钥:值。