JavaScript技术疑问:为何空字符串未被添加到Map中?
问题解析:为何空字符串未被添加到Map的对应数组中?
原代码示例
const strs = ["eat", "tea", "tan", "ate", "nat", "bat"] var sortAlphabets = function(text) { return text.split('').sort().join(''); }; let map = new Map(); for (let str of strs) { let key = sortAlphabets(str); map[key] = [...map[key] || "", str]; } console.log(Object.values(map))
问题描述
当将代码中的map[key] = [...map[key] || "", str];替换为map[key] = [...map[key] || "te", str];时,Map对应属性的数组会先插入"t"和"e"两个字符;但使用空字符串""时,数组里却不会出现空字符串。这是为什么?
原因解释
核心在于扩展运算符(...)对字符串的拆解逻辑:
- 对于非空字符串(比如
"te"),扩展运算符会把它拆成单个字符组成的数组,也就是["t", "e"],所以[..."te", str]最终会变成["t", "e", str]。 - 对于空字符串
"",它没有任何字符可以拆解,扩展后得到的是一个空数组,所以[..."", str]等价于[...[], str],最终结果就是[str],自然看不到空字符串的影子。
另外提个小细节:你这里声明了Map实例,但实际用的是普通对象的属性赋值(map[key] = ...),而非Map的set()方法,不过这和当前问题的核心原因无关。
内容的提问来源于stack exchange,提问作者Nikhil Katte
相关产品推荐
相关产品推荐

