首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组值重复

数组值重复
EN

Stack Overflow用户
提问于 2018-12-20 05:58:23
回答 4查看 45关注 0票数 -1

我正在创建一个网上购物车,在我的购物车中有一系列的产品。

代码语言:javascript
复制
let cars = ["Saab", "Volvo", "BMW", "Volvo"];

for (var i = 0; i < cars.length; i++) {
  document.body.innerHTML += '<div >' + cars[i] + '</div>';
}

我得到了以下信息:

萨博

沃尔沃

宝马

沃尔沃

我需要的是:

萨博

沃尔沃x2

宝马

做这件事最好的方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-20 06:03:43

您可以使用Map进行计数,并迭代此映射以获得渲染结果。

代码语言:javascript
复制
let cars = ["Saab", "Volvo", "BMW", "Volvo"],
    count = cars.reduce((m, v) => m.set(v, (m.get(v) || 0) + 1), new Map);
    
count.forEach((v, k) => document.body.innerHTML += '<div>' + k + (v > 1 ? ' x' + v : '') + '</div>');

票数 2
EN

Stack Overflow用户

发布于 2018-12-20 06:03:08

这是一个相当基本的编程问题。我不会给你答案,但我可以给你解决方案的一般结构。

您的输入是一个包含多个无序项目的数组,您需要做的第一件事是创建一个新结构,该结构对具有相同名称的项目进行分组。

为此,我将创建一个单独的对象,其中包含项以及它们出现的频率。您应该使用Map

循环通过cars数组,并为每辆汽车向Map添加一个条目。您可以使用汽车类型作为关键字,值应该是您看到汽车的频率。

所以对于你的每一个循环:

  • 检查汽车是否存在于地图
  • 中如果存在,则递增1
  • 如果不存在,则创建一个新条目并将其值设置为1。

最后,您得到了一个键->值映射,其中包含项及其计数。

现在你可以循环你的地图和简单地输出汽车类型一个接一个,并附加2x,如果有超过1。

票数 3
EN

Stack Overflow用户

发布于 2018-12-20 06:08:42

将初始数组转换为映射。映射中每个元素的键是汽车的名称,值是汽车在初始列表中出现的次数。

迭代汽车地图并生成HTML字符串。

为整个文档设置HTML有点奇怪,但下面的代码片段应该会得到您想要的内容。

代码语言:javascript
复制
// initial car array
let carArr = ["Saab", "Volvo", "BMW", "Volvo"];
console.log(carArr);

// convert to a map with counts
let carObj = {};
for (let car of carArr) {
  carObj[car] = 1 + (carObj[car] || 0);
}
console.log(carObj);

// concatenate the HTML string
var s = "";
for (let car in carObj) {
  s += '<div >' + car + (carObj[car] > 1 ? ' x' + carObj[car] : '') + '</div>';
}
// set the body HTML
document.body.innerHTML += s;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53859713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档