Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Создание из 2 массивов массив объектов (https://javascript.ru/forum/misc/66915-sozdanie-iz-2-massivov-massiv-obektov.html)

RoyalHunt 17.01.2017 16:22

Создание из 2 массивов массив объектов
 
Здравствуйте, Всем!

Помогите, пожалуйста разобраться. Обыскался уже...

Есть задача объединить два массива в объект массивов.

var positions = [
'Bosh VZHIH-101',
'Ariston WHO-D',
'Atlant Mattel 2016',
'Wirpool FLASH black edition',
'Bosh VH1Z-024'
];

var prices = [
10000,
4800,
9200,
2500,
5700
];

На выходе нужно получить:
[ { name: 'Bosh VZHIH-101', price:10000},
{ name: 'Ariston WHO-D', price:4800},
{ name: 'Atlant Mattel 2016', price:9200 },
{ name: 'Wirpool FLASH black edition', price:9200 },
{ name: 'Bosh VH1Z-024', price:5700} ]


У меня же получается:
[ { name: 'Bosh VZHIH-101' },
{ name: 'Ariston WHO-D' },
{ name: 'Atlant Mattel 2016' },
{ name: 'Wirpool FLASH black edition' },
{ name: 'Bosh VH1Z-024' },
{ price: 10000 },
{ price: 4800 },
{ price: 9200 },
{ price: 2500 },
{ price: 5700 } ]


Мой код:

'use strict';

var positions = [
'Bosh VZHIH-101',
'Ariston WHO-D',
'Atlant Mattel 2016',
'Wirpool FLASH black edition',
'Bosh VH1Z-024'
];

var prices = [
10000,
4800,
9200,
2500,
5700
];


var hits = [];

function createObj(arrayName) {


return arrayName.forEach(function(index){
var hash = {};
if (arrayName == positions){
hash.name = index;
} else {
hash.price = index;
}

hits.push(hash);

});

}

createObj (positions);
createObj (prices);
hits;

Подправьте, пожалуйста.

RoyalHunt 17.01.2017 16:28

И как удалить одну из тем? Их почему-то две образовалось...

ksa 17.01.2017 16:43

Цитата:

Сообщение от RoyalHunt
Подправьте, пожалуйста.

Проход нужно делать по одному массиву... А вот объект нужно делать сразу используя оба массива...

RoyalHunt 17.01.2017 16:48

Цитата:

Сообщение от ksa (Сообщение 441131)
Проход нужно делать по одному массиву... А вот объект нужно делать сразу используя оба массива...

В таком случае мой выбор перебора не подойдет, на сколько я понимаю. Тут нужен классический for?

laimas 17.01.2017 17:00

Цитата:

Сообщение от RoyalHunt
В таком случае мой выбор перебора не подойдет, на сколько я понимаю.

callback в forEach среди аргументов имеет индекс текущего элемента массива, по которому можно получить элемент второго массива.

RoyalHunt 17.01.2017 17:05

Цитата:

Сообщение от ksa (Сообщение 441131)
Проход нужно делать по одному массиву... А вот объект нужно делать сразу используя оба массива...

Цитата:

Сообщение от laimas (Сообщение 441136)
callback в forEach среди аргументов имеет индекс текущего элемента массива, по которому можно получить элемент второго массива.

Изменил на:
'use strict';

var positions = [
'Bosh VZHIH-101',
'Ariston WHO-D',
'Atlant Mattel 2016',
'Wirpool FLASH black edition',
'Bosh VH1Z-024'
];

var prices = [
10000,
4800,
9200,
2500,
5700
];

var hits = [];

function createObj(arrayName1, arrayName2) {

return function(){
for (let i = 0; i<arrayName1.length; i++){
var hash = {};
hash.name = arrayName1[i];
hash.price = arrayName2[i];
hits.push(hash);
}

};

}

createObj (positions, prices);

hits;


Но такой вариант вообще работать не хочет.

laimas 17.01.2017 17:07

Лучше тогда не forEach(), а map():

var positions = [
    'Bosh VZHIH-101',
    'Ariston WHO-D',
    'Atlant Mattel 2016',
    'Wirpool FLASH black edition',
    'Bosh VH1Z-024'
], 
prices = [
    10000,
    4800,
    9200,
    2500,
    5700
], 
obj = positions.map(function(item, index) {
    return {'name' : item, 'price' : prices[index]}
})

console.dir(obj)

RoyalHunt 17.01.2017 17:15

Цитата:

Сообщение от laimas (Сообщение 441139)
Лучше тогда не forEach(), а map():

var positions = [
    'Bosh VZHIH-101',
    'Ariston WHO-D',
    'Atlant Mattel 2016',
    'Wirpool FLASH black edition',
    'Bosh VH1Z-024'
], 
prices = [
    10000,
    4800,
    9200,
    2500,
    5700
], 
obj = positions.map(function(item, index) {
    return {'name' : item, 'price' : prices[index]}
})

console.dir(obj)


Красиво! Нечего сказать! Пойду обновлю инфу о map в своей голове.

Спасибо большое!


Часовой пояс GMT +3, время: 11:02.