如何计算对象的重复属性值?

时间:2017-03-28 07:08:31

标签: javascript

我的对象中有一个电子邮件列表。如:

{
    email1: yada@gmail.com,
    email2: hada@gmail.com,
    email3: hada@gmail.com
}

我想找到重复的电子邮件,计算每个电子邮件的重复值,然后在另一个对象中,显示为每封电子邮件找到的重复电子邮件的数量。

我该怎么做?

5 个答案:

答案 0 :(得分:1)



// Input 

    var input = {
         email1: "yada@gmail.com",
         email2: "hada@gmail.com",
         email3: "hada@gmail.com"
        }

    var output = {};
    for (var key in input) {
        output[input[key]] = (output[input[key]] || 0) + 1;
    }

    for (var key in output) {
        if (output[key] > 1) {
            console.log(key, output[key]);
        }
    }




JSBIN

答案 1 :(得分:1)



var input = {
  email1: 'yada@gmail.com',
  email2: 'hada@gmail.com',
  email3: 'hada@gmail.com'
}

// first get a count of each:
var addressCount = Object.keys(input)     // get the keys of the object
  .map(function(k) { return input[k] })   // map to get an array of the addresses
  .reduce(function(acc, email) {          // reduce that array using an object
    acc[email] = (acc[email] || 0) + 1    // to keep totals for each distinct email
    return acc
  }, {})  
console.log(addressCount)

// then keep the ones with count > 1
var duplicates = Object.keys(addressCount)
  .reduce(function(acc, email) {
    if (addressCount[email] > 1)
      acc[email] = addressCount[email]
    return acc
  }, {})
console.log(duplicates)
  




答案 2 :(得分:0)

也许是这样的:

function countEmails(emails) {
  return Object
    .keys(emails)
    .map(email => emails[email])
    .reduce((counter, email) => {
      return Object.assign({}, counter, {
        [email]: counter[email] ? (counter[email] + 1) : 1,
      });
    }, {});
}

const emails = {
  email1: 'asdf@asdf.asdf',
  email2: 'asdf@asdf.asdf',
  email3: 'qwer@qwer.qwer',
};

console.log(countEmails(emails)); // { 'asdf@asdf.asdf': 2, 'qwer@qwer.qwer': 1 }

答案 3 :(得分:0)

希望此代码段有用

var obj = {
  email1: 'yada @gmail.com',
  email2: 'hada @gmail.com',
  email3: 'hada @gmail.com'
}
var tempArray = []; // An array to track what is not duplicate
var newObj = {}  // It is new object without duplicate
for (var keys in obj) {
  // check in array if a key value is present
  if (tempArray.indexOf(obj[keys]) === -1) { 
    // if not present add in the array, so next time it wont add again
    tempArray.push(obj[keys]);
    // in new object create a relevant key and add it's value
    newObj[keys] = obj[keys]
  }
}
console.log(newObj)

DEMO

答案 4 :(得分:0)

您可以尝试这样的事情:

逻辑:

  • 创建2个对象,一个用于计数,另一个用于重复。
  • 循环播放电子邮件,并在counts中设置具有必要值的值。
  • 如果计数超过1,请将其值设置为dupes

var input = {
  email1: 'yada@gmail.com',
  email2: 'hada@gmail.com',
  email3: 'hada@gmail.com'
}

var counts = {};
var dupes = {};

for(var k in input){
  var v = input[k];
  var count = (counts[v] || 0) + 1;
  counts[v] = count;
  if(count > 1)
    dupes[v] = count
}

console.log(counts, dupes)

相关问题