【问题标题】:Convert and eliminate duplicates in a JavaScript array to an ordinary object (containing arrays)将 JavaScript 数组中的重复项转换并消除为普通对象(包含数组)
【发布时间】:2020-12-28 09:45:08
【问题描述】:

在 JavaScript 中,我有一个包含站点数据的数组:

var sites = [ 
  ["Alabama", "Huntsville"], 
  ["Tennessee", "Nashville"], 
  ["Tennessee", "Memphis"], 
  {Tennessee, "Knoxville"], 
  ["New Mexico", "Los Alamos"], 
  ["New Mexico", "Santa Fe"] 
];

我需要将它转换为一个对象,这样州名就成为对象键,而城市名是数组中的值。这也将删除重复的状态名称,使对象看起来像这样:

var newSites = {
  Alabama: ["Huntsville"], 
  Tennessee: ["Nashville", "Memphis", "Knoxville"], 
  NewMexico: ["Los Alamos", "Santa Fe"] 
};

我已经开始编写一些程序,将数组中的状态名称与数组中的下一个状态名称进行比较,以组合类似的状态名称,但我的逻辑很长而且看起来……很乱。 (州名按字母顺序列出,所以我的基本前提应该有效。此外,该数组永远不会有州名或城市名的空值或无效值。)

有没有雄辩的方式输出这样的对象?

【问题讨论】:

  • “我已经开始编写一些程序,我将数组中的状态名称与数组中的下一个状态名称进行比较以组合类似的状态名称,但我的逻辑很长而且似乎...... .messy。” 将其添加到问题中。这就是它的工作原理以及混乱的代码如何变得更整洁。
  • 我同意编程是混乱的,代码后来被清理了,但我也相信询问是否有直接解决这个问题的方法是合法的。如果事实证明 lodash 中有一些东西将我的逻辑从 50 行变为 6 行,我愿意把它放在那里......
  • 这不是重点。 StackOverflow 不是代码编写服务。
  • 阿路,点了。我试图找出是否有明确执行此操作的函数。
  • 不需要检查下一个州名——创建对象,如果有一个州的键,附加城市值,如果没有,创建数组,并附加城市价值。有多种方法可以做到这一点——IMO 从最简单的最有效的方法开始,然后你可以用reduce 或其他任何你不熟悉的方法来修饰它。 (加上检查“下一个”数组值依赖于排序,这不是必需的。)

标签: javascript arrays object duplicates formatting


【解决方案1】:

@Dave Newton 为我提供了我需要的确切方向(尽管我意识到我可以进一步加强这一点)。不再有 50 行代码!

var sites = [["Alabama", "Huntsville"], ["Tennessee", "Nashville"], ["Tennessee", "Memphis"], ["Tennessee", "Knoxville"],["New Mexico", "Los Alamos"], ["New Mexico", "Santa Fe"]];

var obj = {};
for (let x= 0; x < sites.length; x++) {
  let siteState =  sites[x][0];
  obj[siteState] = [];
}
for (let x= 0; x < sites.length; x++) {
  let siteState =  sites[x][0];
  let siteCity = sites[x][1];
  obj[siteState].push(siteCity);
}
console.log(obj);

【讨论】:

  • 很高兴你解决了 :) 我唯一要改变的是只做一个循环,并且可能解构每个条目,例如,const [state, city] = sites[x],但这些都是相对次要的点。我几乎总是从“让它工作”开始,然后转向“让它更正确”;这只是可以跳过多少步骤的问题,这只是时间和经验。
猜你喜欢
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 2021-05-09
相关资源
最近更新 更多