【问题标题】:To get an array of distinct strings from a map, extracting the string from a property of the Map values要从映射中获取不同字符串的数组,从映射值的属性中提取字符串
【发布时间】:2018-11-28 09:48:08
【问题描述】:

我需要从映射中获取不同字符串的数组,从映射值的属性中提取字符串。目前,我有以下代码,想知道是否有更优雅的方法来做到这一点?

myMap   {   key1 : [{ a : “myA”, b : “myB”, c : “myC”}, {  a : “myAA”, b : “myB”, c : “myC”}],
            key2 : [{ a : “myAA”, b : “myB”, c : “myC”}, {  a : “myAAA”, b : “myB”, c : “myC”}]
        }

需要回答 = ["myA", "myAA", "myAAA"]

var ans = new Set();

for (let i of myMap.values()) {
    for (let j of i){
        ans.add(j.a);
    }
}

return Array.from(ans);

【问题讨论】:

标签: javascript arrays dictionary for-loop


【解决方案1】:
 return [...new Set([...myMap.values()].map(el => el.a))];

只需使用map 将其缩短一点。


或者,您可以使用帮助程序来确保唯一性:

const unique = (s = new Set) => el => !s.has(el) && s.add(el);

所以你可以这样做:

return [...myMap.values()].filter(unique());

【讨论】:

  • 恐怕这会给我一个未定义的返回值。我认为它没有注意到 values 的每个元素也是一个数组,因此每个元素中都有多个 el。
猜你喜欢
  • 1970-01-01
  • 2022-11-26
  • 2023-03-05
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2022-07-26
  • 2022-09-26
  • 2020-07-15
相关资源
最近更新 更多