【问题标题】:How to check if the elements in an array are repeated? [closed]如何检查数组中的元素是否重复? [关闭]
【发布时间】:2014-09-27 08:41:23
【问题描述】:

大家好,我是编码新手,我想知道如何在不知道这些对象是什么的情况下找出数组是否有重复的对象,而不管它们的顺序如何?例如:

我创建一个空数组:

var random_array = [];

然后我使用一个函数来推送该数组中的对象,所以我最终得到:

var random_array = [ball, ball, tree, ball, tree, bus, car];

在上面的数组中我们有:

3 球、2 棵树、1 辆公共汽车、1 辆汽车。

那么我怎么才能知道这些重复的数字呢?我应该使用 for 循环还是什么?无论如何,我是编码新手,所以请多多包涵。提前致谢!

编辑:

好的,这是我的简单代码:

function Product(name, price) {
    this.name = name;
    this.price = price;
}

var register = {
    total: 0,
    list: [],

    add: function(Object, quant) {
        this.total += Object.price * quant;
        for (x=0; x <quant; x++) {
        this.list.push(Object);
        }
    },

undo: function() {
    var last_item = this.list[this.list.length - 1];
    this.total -= last_item.price;
    this.list.pop(this.list[this.list.length - 1]);
    },

print: function() {
    console.log("Super Random Market");
    for (x = 0; x < this.list.length; x++) {
        console.log(this.list[x].name + ": " + this.list[x].price.toPrecision(3));
    }
    console.log("Total: " + this.total.toFixed(2));
    }
}

var icecream_1 = new Product("Chocolate Icecream", 2.30);
var cake_1 = new Product("Chocolate cake", 4.00);

register.add(icecream_1, 5);
register.add(cake_1, 3);

register.print();

我正在尝试构建一个收银机,并且我正在尝试找出如何仅将商品的数量打印一次,而不是多次打印。

【问题讨论】:

  • 一个对象不能重复,因为没有两个对象是相同的?您将数组、对象、字符串和未定义的变量混在一起,所以很难理解您真正要问的是什么?
  • 您可能对此感兴趣:stackoverflow.com/questions/13486479/…
  • 您需要检查具有相同属性值的相同类型的对象还是仅检查相同类型的对象?
  • 欢迎编码,欢迎使用 stackoverflow。很难帮助您,因为您没有尝试任何事情或展示您已经完成的任何事情。我们的社区旨在帮助您学习,而不是为您做事。尝试循环。看看它是否有效,如果遇到问题,请在此处发布。
  • @Luka,具有相同属性值的相同类型的对象。

标签: javascript arrays


【解决方案1】:

下面的代码应该可以工作。

    var randomArray = ["ball", "ball", "tree", "ball", "tree", "bus", "car"];       
        Array.prototype.findUniqueCount = function(){
          var collection = {}, i;   
          for (i = 0; i < this.length; i = i+1 ) {    
             collection[this[i]] = (collection[this[i]] || 0) + 1;
            }  
          return collection;
        };
console.log(randomArray.findUniqueCount());//{ ball: 3, tree: 2, bus: 1, car: 1 } 

检查这个网址 https://coderpad.io/HEGY26FN

【讨论】:

    【解决方案2】:
    var randomArray = ["ball", "ball", "tree", "ball", "tree", "bus", "car"];
    var itemCount = {};
    
    randomArray.forEach(function(value){
        if(value in itemCount) itemCount[value] = itemCount[value] + 1;
        else itemCount[value] = 1;
    });
    

    然后您可以像这样引用数组中“球”的数量:itemCount.ball 这将返回 3。

    小提琴:http://jsfiddle.net/3XpXn/2/

    缩小:

    var randomArray = ["ball", "ball", "tree", "ball", "tree", "bus", "car"],
        itemCount = {};
    
    randomArray.forEach(function(value){
        value in itemCount ? itemCount[value] = itemCount[value] + 1 : itemCount[value] = 1;
    });
    

    【讨论】:

    • 创建唯一数组的一个很好的解决方案,但是从 OP 的陈述中我不清楚他是否想要这个,或者他是否想要出现次数。
    • @ThomasWTupper:看起来他想计算重复项:“3 个球,2 个树……”等等。
    • 哦,我明白了。然后 1 秒。
    • 感谢大家的回复,我会试试Kolby建议的这个东西。无论如何,我想学习的是如何构建一个简单的收银机,所以我也会用我的代码更新 OP。我想知道为什么数组中的一个元素会重复,所以我不需要打印 X 次,而是可以用它的数量打印一次!
    • @Kolby 已投票。我仍然建议只使用普通的for 循环,但我会留给你。对于 OP:请注意,Internet Explorer 8 及更低版本不支持 Array.forEachECMAScript 5 compatibility table
    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2017-03-11
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多