JavaScript使用扩展运算符为对象添加负号键值对不生效如何解决
问题原因
原有代码的核心错误是:map 方法返回的是仅包含负号前缀字符串的数组,直接用展开运算符...将数组展开到对象中时,会默认把数组的索引作为新对象的键、负号字符串作为对应值,完全无法生成你预期的「负号前缀为键、空数组为对应值」的结构。
修正后代码
let bucket = [[],[],[],[],[],[],[],[],[],[]]; bucket = { // 先生成负号前缀键对应的空数组对象 ...Object.fromEntries( Object.keys(bucket) .sort((a,b) => b - a) .filter(key => key > 0) .map(key => [`-${key}`, []]) ), // 保留原有bucket的全部属性和取值 ...bucket }; console.log(bucket);
实现说明
- 用
Object.fromEntries方法,将map返回的[键名, 键值]格式二维数组,直接转换为符合要求的键值对对象,所有负号前缀的键都会对应空数组[] - 如果需要原有正整数键的优先级高于负号键,保持现有展开顺序即可;如果需要负号键覆盖同名属性,调换两个
...展开的位置即可。
内容的提问来源于stack exchange,提问作者Vahe
相关产品推荐
相关产品推荐

