Вопрос по arrays, javascript – Подсчет дубликатов в массиве объектов

6

У меня есть массив объектов в JS на стороне сервера:

<code>[
    {
        "Company": "IBM"
    },
    {
        "Person": "ACORD LOMA"
    },
    {
        "Company": "IBM"
    },
    {
        "Company": "MSFT"
    },
    {
        "Place": "New York"
    }
]
</code>

Мне нужно пройтись по этой структуре, обнаружить любые дубликаты и затем создать счетчик дубликатов вдоль каждого значения.

Оба значения должны совпадать, чтобы считаться дубликатом, например «Компания»: «IBM» не соответствует «Компании»: «MSFT».

У меня есть возможность изменить входящий массив объектов, если это необходимо. Я хотел бы, чтобы выходные данные были объектами, но я действительно изо всех сил пытаюсь заставить это работать.

EDIT: Вот код, который у меня есть, где processArray - это массив, как указано выше.

<code>var returnObj = {};

    for(var x=0; x < processArray.length; x++){

        //Check if we already have the array item as a key in the return obj
        returnObj[processArray[x]] = returnObj[processArray[x]] || processArray[x].toString();

        // Setup the count field
        returnObj[processArray[x]].count = returnObj[processArray[x]].count || 1;

        // Increment the count
        returnObj[processArray[x]].count = returnObj[processArray[x]].count + 1;

    }
    console.log('====================' + JSON.stringify(returnObj));
</code>
@ RoyiNamir: хахаха, это не я Sarfraz
Которыйи то и друго ценности ты о чем? У каждого объекта есть только одно значение ... и если вы уже знаете, что вам нужно перебирать список, с чем у вас проблемы? Felix Kling
Прошу прощения за то, что не опубликовал мой тестовый код. Пожалуйста, смотрите дополнительное редактирование. Ben
А такжеЗаче должен ли кто-то другой делать эту работу за тебя? Travis J

Ваш Ответ

2   ответа
2
Object.prototype.equals = function(o){
    for(var key in o)
        if(o.hasOwnProperty(key) && this.hasOwnProperty(key))
            if(this[key] != o[key])
                return false;
    return true;
}
var array = [/*initial array*/],
    newArray = [],
    ok = true;
for(var i=0,l=array.length-1;i<l;i++)
    for(var j=i;j<l+1;j++)
    {
       if(!array[i].equals(array[j]))
           newArray.push(array[i]);
    }
27

Например

counter = {}

yourArray.forEach(function(obj) {
    var key = JSON.stringify(obj)
    counter[key] = (counter[key] || 0) + 1
})

Документы: Array.forEach, JSON.stringify.

Hi ты можешь объяснить эту строку (counter [key] || 0) + 1 Я никогда не видел этого раньше. Kem Bardly
если счетчик [ключ] не существует, тогда используйте 0 вместо ilumin

Похожие вопросы