Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сборка массива по повторяющемуся значению, конкатенация 
:(
    Опции темы
vthm
Дата 30.10.2014, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.10.2014

Репутация: нет
Всего: нет



есть массив

Код

var massiv = [
{1,2,1},
{1,2,2},
{1,3,2},
{2,3,3},
{2,3,3},
{1,5,5}
]


нужно обьединить те под массивы, у которых первый и второй елемент одинаковы, а третий елемент добавить друг к другу

то есть, получится
Код

{1,2,3} = {1,2,1} + {1,2,2}
{2,3,6} = {2,3,3} + {2,3,3}


Код

var result = [
{1,2,3},
{1,3,2},
{2,3,6},
{1,5,5}
]


помогите

Добавлено @ 01:14
Код

var result = {};
for (var i = 0; i < abc.length; i++) {
    var val = parseInt(abc[i][1], 10);
    var year = abc[i][0];
    if (year in result) {
        result[year] += val;
    } else {
        result[year] = val;
    }
}
for (year in result) {
    console.log('Year: ' + year + ' Sum: ' + result[year]);
}


но как сделать проверку по нескольким переменным?

Это сообщение отредактировал(а) Aliance - 30.10.2014, 10:28
PM MAIL   Вверх
Aliance
Дата 30.10.2014, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Многовато циклов, но пока что только такое решение в голову пришло.

Код

var array = [
    [1,2,1],
    [1,2,2],
    [1,3,2],
    [2,3,3],
    [2,3,3],
    [1,5,5]
];

var newArray = [];

array.forEach(function(value) {
    if (typeof newArray[value[0]] === 'undefined') {
        newArray[value[0]] = [];
    }
    if (typeof newArray[value[0]][value[1]] === 'undefined') {
        newArray[value[0]][value[1]] = 0;
    }
    newArray[value[0]][value[1]] += value[2];
});

var resultArray = [];

newArray.forEach(function(subArray, subIndex) {
    subArray.forEach(function(value, index) {
        resultArray.push([subIndex, index, value]);
    });
});

console.log(resultArray);

PM MAIL WWW ICQ Skype   Вверх
sQu1rr
Дата 30.10.2014, 12:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



А тут много мапов smile
Код

var array = [
    [1,2,1],
    [1,2,2],
    [1,3,2],
    [2,3,3],
    [2,3,3],
    [1,5,5]
];

var result = (function() {
    var temp = {};
    array.forEach(function(value) {
        var key = [value[0], value[1]].toString();
        temp[key] = (temp[key] || 0) + value[2];       
    });

    return Object.keys(temp).map(function(value) {
        return value.split(',').map(function(val) {
            return parseInt(val);
        }).concat(temp[value]);
    });
})();


Это сообщение отредактировал(а) sQu1rr - 30.10.2014, 13:03
PM MAIL Skype GTalk   Вверх
Aliance
Дата 30.10.2014, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



sQu1rr, воу воу воу, на 85% медленнее моего  smile 
http://jsperf.com/array-concatenate
PM MAIL WWW ICQ Skype   Вверх
sQu1rr
Дата 30.10.2014, 14:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 1
Всего: 13



Если порядок не важен то можно так
Код

var array = [
    [1,2,1],
    [1,2,2],
    [1,3,2],
    [2,3,3],
    [2,3,3],
    [1,5,5]
];

var result = (function() {
    if (!array.length) return [];

    array.sort(function(lhv, rhv) {
        return lhv[0] - rhv[0] || lhv[1] - rhv[1];
    });

    var out = [], a = array[0][0], b = array[0][1], c = array[0][2];
    for (var i = 1; i < array.length; ++i) {
        var value = array[i];
        if (value[0] === a && value[1] === b) c += value[2];
        else {
            out.push([a, b, c]);
            a = value[0]; b = value[1]; c = value[2];
        }
    };
    out.push([a, b, c]);
    return out;
})();

Я тоже люблю мерится МПХ скоростью  smile 
http://jsperf.com/cock-comparison

Это сообщение отредактировал(а) sQu1rr - 30.10.2014, 14:12
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.