You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:实现字典键存储多位置值并按字母序排序键

解决字母出现位置记录与字典键排序问题

嘿,作为JS新手遇到这个问题很正常,我帮你拆解下问题所在,一步步解决它~

一、修复字母位置记录的问题

你的代码里有两个关键问题导致只保留了最后一个位置:

  • 条件判断的逻辑错误:!stringArgument[i] in dict的写法有问题,因为逻辑非!的优先级比in高,实际执行的是!(stringArgument[i]) in dict,这完全不是你想要的判断(判断当前字母是否不在字典里)。正确的写法应该是!(stringArgument[i] in dict),或者更直观的dict[stringArgument[i]] === undefined。
  • 数组赋值错误:else分支里你直接把dict[stringArgument[i]]赋值为[i+1],这会覆盖之前已经存储的数组,正确的做法是用push()方法把新的位置添加到已有的数组里。

修正后的代码如下:

function letters(stringArgument) {
  stringArgument = stringArgument.replace(/ /g,'');
  var dict = {};
  for (var i=0; i < stringArgument.length; i++ ) {
    var char = stringArgument[i];
    // 判断当前字符是否未在字典中
    if (!(char in dict)){
      dict[char] = [i+1]; // 初始化一个包含当前位置的数组
    } else {
      dict[char].push(i+1); // 把新位置添加到数组末尾
    }
  }
  return dict;
}
var a = letters('Lost time is never found again.');
console.log(a);

现在执行这段代码,就能得到每个字母的所有出现位置了,比如o会变成[2, 17],完全符合你的预期。

二、将字典的按键按字母顺序排序

JavaScript对象的键在ES6及以后版本有一定的顺序,但如果要明确按字母(默认大写字母排在小写前面)排序,我们可以先提取所有键,排序后再生成一个新的有序对象:

方法1:生成排序后的新对象

function getSortedDict(originalDict) {
  // 提取键并排序,localeCompare可以处理多语言字母排序
  const sortedKeys = Object.keys(originalDict).sort((a, b) => a.localeCompare(b));
  const sortedDict = {};
  sortedKeys.forEach(key => {
    sortedDict[key] = originalDict[key];
  });
  return sortedDict;
}

// 使用示例
var result = letters('Lost time is never found again.');
var sortedResult = getSortedDict(result);
console.log(sortedResult);

如果想要忽略大小写排序(比如把L和a按字母顺序混排),可以修改sort的回调:

const sortedKeys = Object.keys(originalDict).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));

方法2:直接输出排序后的键值对(如果不需要对象格式)

如果你只是想按顺序查看结果,也可以直接遍历排序后的键:

Object.keys(result).sort((a,b) => a.localeCompare(b)).forEach(key => {
  console.log(`${key}: ${result[key]}`);
});

内容的提问来源于stack exchange,提问作者arty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:08:00