Как соединить массивы?

218
13 октября 2018, 02:40

Подскажите, пожалуйста, по задаче:

Есть три массива, первый это время, тут главное hours, (car, bike - всегда нули). Второй и третий массив это данные которые приходят порознь, два сразу только для примера.

let hours = [ {0: "hour":0, 'car':0, 'bike': 0}, {1: "hour":1, 'car':0, 'bike': 0}, {2: "hour":2, 'car':0, 'bike': 0}, {3: "hour":3, 'car':0, 'bike': 0}, {4: "hour":4, 'car':0, 'bike': 0}, {5: "hour":5, 'car':0, 'bike': 0}, {6: "hour":6, 'car':0, 'bike': 0}, {7: "hour":7, 'car':0, 'bike': 0}, ];

let first = [ {0: "hour":5, 'car':10, 'bike': 10}, {1: "hour":8, 'car':20, 'bike': 0}, {2: "hour":9, 'car':30, 'bike': 0}, {3: "hour":10, 'car':40, 'bike': 0}, ];

let second = [ {0: "hour":0, 'car':11, 'bike': 12}, {1: "hour":7, 'car':15, 'bike': 25}, {2: "hour":8, 'car':20, 'bike': 30}, {3: "hour":9, 'car':10, 'bike': 30}, {4: "hour":10, 'car':120, 'bike': 140}, ]; Как можно сделать так чтобы я мог соединять массив времени с другим массивом и заменять недостающие данные, к примеру:

hours + first, должно выйти: first = [ // в first отсутствует hour:0,1,2,3,4, значит нужно добавить с массива hours {0: "hour":0, 'car':0, 'bike': 0}, {1: "hour":1, 'car':0, 'bike': 0}, {2: "hour":2, 'car':0, 'bike': 0}, {3: "hour":3, 'car':0, 'bike': 0}, {4: "hour":4, 'car':0, 'bike': 0}, // дальше добавляем то что было в first {5: "hour":5, 'car':10, 'bike': 10}, // с hours, потому что в first нету 6,7 {6: "hour":6, 'car':0, 'bike': 0}, {7: "hour":7, 'car':0, 'bike': 0}, {8: "hour":8, 'car':20, 'bike': 0}, {9: "hour":9, 'car':30, 'bike': 0}, {10: "hour":10, 'car':40, 'bike': 0}, ];

hours + second:

second = [ // Данные с second {0: "hour":0, 'car':11, 'bike': 12}, // Данные с hours {1: "hour":1, 'car':0, 'bike': 0}, {2: "hour":2, 'car':0, 'bike': 0}, {3: "hour":3, 'car':0, 'bike': 0}, {4: "hour":4, 'car':0, 'bike': 0}, {5: "hour":5, 'car':0, 'bike': 0}, {6: "hour":6, 'car':0, 'bike': 0}, // Данные с second должны затереть данные с нулями из hours {7: "hour":7, 'car':15, 'bike': 25}, {8: "hour":8, 'car':20, 'bike': 30}, {9: "hour":9, 'car':10, 'bike': 30}, {10: "hour":10, 'car':120, 'bike': 140}, ];

Грубо говоря соеденить два массива. Честно, много перепробовал, но результата;

Подскажите, пожалуйста.

Answer 1

let hours = [ 
  {"hour":1, 'car':0, 'bike': 0}, 
  {"hour":0, 'car':0, 'bike': 0}, 
  {"hour":2, 'car':0, 'bike': 0}, 
  {"hour":3, 'car':0, 'bike': 0}, 
  {"hour":4, 'car':0, 'bike': 0}, 
  {"hour":5, 'car':0, 'bike': 0}, 
  {"hour":6, 'car':0, 'bike': 0}, 
  {"hour":7, 'car':0, 'bike': 0} 
] 
 
let first = [ 
  {"hour":5, 'car':10, 'bike': 10}, 
  {"hour":8, 'car':20, 'bike': 0}, 
  {"hour":9, 'car':30, 'bike': 0}, 
  {"hour":10, 'car':40, 'bike': 0} 
] 
 
let second = [ 
  {"hour":0, 'car':11, 'bike': 12}, 
  {"hour":7, 'car':15, 'bike': 25}, 
  {"hour":8, 'car':20, 'bike': 30}, 
  {"hour":9, 'car':10, 'bike': 30}, 
  {"hour":10, 'car':120, 'bike': 140} 
] 
 
console.log(combine(hours, first)); 
console.log(combine(hours, second)); 
 
function combine(array1, array2){ 
 
  var map1 = array1.reduce((prev, item) => { 
    prev[item.hour] = item; 
    return prev; 
  }, {}); 
 
  var map2 = array2.reduce((prev, item) => { 
    prev[item.hour] = item; 
    return prev; 
  }, {}) 
 
  for (var key in map2){ 
    map1[key] = map2[key] 
  } 
 
  var result = [] 
  for (var key in map1){ 
    result.push(map1[key]) 
  } 
 
  return result 
}

Answer 2

Не знаю насколько это правильно, но вот что у меня получилось:

let hours = [ 
  {"hour":1, 'car':0, 'bike': 0}, 
  {"hour":0, 'car':0, 'bike': 0}, 
  {"hour":2, 'car':0, 'bike': 0}, 
  {"hour":3, 'car':0, 'bike': 0}, 
  {"hour":4, 'car':0, 'bike': 0}, 
  {"hour":5, 'car':0, 'bike': 0}, 
  {"hour":6, 'car':0, 'bike': 0}, 
  {"hour":7, 'car':0, 'bike': 0} 
] 
 
let first = [ 
  {"hour":5, 'car':10, 'bike': 10}, 
  {"hour":8, 'car':20, 'bike': 0}, 
  {"hour":9, 'car':30, 'bike': 0}, 
  {"hour":10, 'car':40, 'bike': 0} 
] 
 
let second = [ 
  {"hour":0, 'car':11, 'bike': 12}, 
  {"hour":7, 'car':15, 'bike': 25}, 
  {"hour":8, 'car':20, 'bike': 30}, 
  {"hour":9, 'car':10, 'bike': 30}, 
  {"hour":10, 'car':120, 'bike': 140} 
] 
 
        function add(left, right) { 
            for (let i = 0; i < left.length; i++) { 
                if (left[i].hour != right[i].hour) { 
                    right.splice([i], 0, left[i]); 
                } 
            } 
 
        } 
 
        add(hours, first); 
        add(hours, second); 
 
 
        console.log(first); 
        console.log(second);

Answer 3

let hours = [ 
    {"hour":0, 'car':0, 'bike': 0}, 
    {"hour":1, 'car':0, 'bike': 0}, 
    {"hour":2, 'car':0, 'bike': 0}, 
    {"hour":3, 'car':0, 'bike': 0}, 
    {"hour":4, 'car':0, 'bike': 0}, 
    {"hour":5, 'car':0, 'bike': 0}, 
    {"hour":6, 'car':0, 'bike': 0}, 
    {"hour":7, 'car':0, 'bike': 0}, 
]; 
 
 
 
let first = [ 
    {"hour":5, 'car':10, 'bike': 10}, 
    {"hour":8, 'car':20, 'bike': 0}, 
    {"hour":9, 'car':30, 'bike': 0}, 
    {"hour":10, 'car':40, 'bike': 0}, 
]; 
 
 
 
let second = [ 
    {"hour":0, 'car':11, 'bike': 12}, 
    {"hour":7, 'car':15, 'bike': 25}, 
    {"hour":8, 'car':20, 'bike': 30}, 
    {"hour":9, 'car':10, 'bike': 30}, 
    {"hour":10, 'car':120, 'bike': 140}, 
]; 
 
hours.push(...second) 
console.log(hours);

READ ALSO
Cocos2d js, как сделать подобное?

Cocos2d js, как сделать подобное?

Сначала нужно нарисовать что-то типа шахматной доски(то есть квадрат состоящий из белых и черных ячеек) Потом заполнить это рандомными фишками...

191
Как отключить owlCarousel на мобиле

Как отключить owlCarousel на мобиле

Проблема простая, но все что я находил в интернете не работаетНичего не изменяется

195
Ошибка при работе с select.value

Ошибка при работе с select.value

Не могу понять причину ошибкиБуду благодарен за объяснение

188
Транзакции в Mysql

Транзакции в Mysql

При каких уровнях изоляций в mysql, одновременные запросы потоков встают в очередь?

195