Задать вопрос
Millerish
@Millerish

JS. Как переложить из одного массива данные в другой?

Доброе время суток!

Помогите решить вопрос по работе с массивом. Нужно переложить с многомерного массива данные в одномерный. При совпадении имени (Euroshop, Tur) не добавлять элемент и сложить сумму(2500+2500) и площадь(7500) .

Исходные данные:

var m = [ ['Euroshop', 2500, 7500] , ['Euroshop', 2500, 7500], ['Tur', 2500, 7500] ];
var TOTAL_PAINTING = 3;
var m2 = [];


На выходе должно быть так:
m2 = ["Euroshop", 5000, 15000, "Tur", 2500 7500];

Пробую так:
for (var i = 0; i < TOTAL_PAINTING; i++) {
            if (m2.length == 0){
                m2.push(m[i][0]);
                m2.push(m[i][1]);
                m2.push(m[i][2]);
            }
            else {
                debugger;
                var status = true;
                var price = 0;
                for (var j = 0; j < m2.length; j++) {
                    if (m2[j] == m[i][0]) {
                        for (var g = m2.length; g >= 0; g--) {
                            if (m2[j] == m[i][0]){
                                m2[j+1] = m2[j+1] + m[i][1]
                            }
                        }
                        status = false;
                    }
                }
                if (status == true){
                    m2.push(m[i][0]);
                    m2.push(price);
                    m2.push(m[i][2]);
                }
            }

        }

В чем ошибка??? Как правильно?
  • Вопрос задан
  • 1356 просмотров
Подписаться 1 Оценить 1 комментарий
Решение пользователя Константин Громов К ответам на вопрос (3)
Если разложить задачу на два этапа: сложение и наполнение конечного массива, то становится гораздо меньше каши и, соответственно, вероятность ошибки.

var m1 = [['Euroshop', 2500, 7500], ['Euroshop', 2500, 7500], ['Tur', 2500, 7500]],
    m2 = [],
    helper = {};

for (var i = 0; i < m1.length; i++) {
    var name = m1[i][0],
        data = m1[i].slice(1);

    if (name in helper) {
        helper[name][0] += data[0];
        helper[name][1] += data[1];
    } else {
        helper[name] = data;
    }
}

for (var key in helper) {
    m2.push(key, helper[key][0], helper[key][1]);
}

console.log(m2);
Ответ написан
Комментировать