我想遍历我的键/值对并将每个键的所有值推入其自己的数组中。每个键的这些值数组应推入单个输出数组。
我希望这可以解释我要做什么:
Input: map = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]}
Output: output = [["hello","hey","howdy"],["Goodbye","Ciao"]]
这是我到目前为止所拥有的:
return Object.keys(map).reduce((output, key) => {
return output.push(map[key])
},[])
对于遍历每个键的值并将这些值添加到另一个输出数组中的数组的任何帮助,将不胜感激。
对于背景,这是分组字谜问题的一部分,因此我从提供的字符串数组“ str”中按如下方式填充地图。
let map = {};
str.forEach(anagram => {
const sortedWord = anagram
.split("")
.sort()
.join("");
map[sortedWord] = map[sortedWord] || [];
map[sortedWord].push(anagram);
});
答案 0 :(得分:4)
您需要的只是内置的Object.values()
:
Object.values()
返回一个数组,其元素是在对象上找到的可枚举的属性值。
const map = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]};
const output = Object.values(map);
console.log(output);
答案 1 :(得分:1)
使用减少返回到“输出”的推动力,无需压倒自己:
return Object.keys(map).reduce((output, key) => {
return map[key]
},[])
您还可以使用地图:
return Object.keys(map).map((key) => {
return map[key]
})
答案 2 :(得分:1)
除了上面两个很好的答案外,您还可以选择使用Object.entries(),它将返回输入对象的[key, value]
对中的数组。从那里,我们只能将value
返回到结果数组中,从而为您提供预期的结果。
const input = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]}
const result = Object.entries(input).map(item => item[1]);
console.log(result);
但是,请注意,Internet Explorer浏览器不支持Object.entries()
。
或者,您可以使用旧的for..in语句来迭代对象的可枚举属性,然后将相应的值压入结果数组。
const input = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]}
const result = []
for (const property in input) {
result.push(input[property]);
}
console.log(result);