Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2017, 16:22
Аватар для RoyalHunt
Интересующийся
Отправить личное сообщение для RoyalHunt Посмотреть профиль Найти все сообщения от RoyalHunt
 
Регистрация: 17.01.2017
Сообщений: 16

Создание из 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;

Подправьте, пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2017, 16:28
Аватар для RoyalHunt
Интересующийся
Отправить личное сообщение для RoyalHunt Посмотреть профиль Найти все сообщения от RoyalHunt
 
Регистрация: 17.01.2017
Сообщений: 16

И как удалить одну из тем? Их почему-то две образовалось...
Ответить с цитированием
  #3 (permalink)  
Старый 17.01.2017, 16:43
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от RoyalHunt
Подправьте, пожалуйста.
Проход нужно делать по одному массиву... А вот объект нужно делать сразу используя оба массива...
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2017, 16:48
Аватар для RoyalHunt
Интересующийся
Отправить личное сообщение для RoyalHunt Посмотреть профиль Найти все сообщения от RoyalHunt
 
Регистрация: 17.01.2017
Сообщений: 16

Сообщение от ksa Посмотреть сообщение
Проход нужно делать по одному массиву... А вот объект нужно делать сразу используя оба массива...
В таком случае мой выбор перебора не подойдет, на сколько я понимаю. Тут нужен классический for?
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2017, 17:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от RoyalHunt
В таком случае мой выбор перебора не подойдет, на сколько я понимаю.
callback в forEach среди аргументов имеет индекс текущего элемента массива, по которому можно получить элемент второго массива.
Ответить с цитированием
  #6 (permalink)  
Старый 17.01.2017, 17:05
Аватар для RoyalHunt
Интересующийся
Отправить личное сообщение для RoyalHunt Посмотреть профиль Найти все сообщения от RoyalHunt
 
Регистрация: 17.01.2017
Сообщений: 16

Сообщение от ksa Посмотреть сообщение
Проход нужно делать по одному массиву... А вот объект нужно делать сразу используя оба массива...
Сообщение от laimas Посмотреть сообщение
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;


Но такой вариант вообще работать не хочет.
Ответить с цитированием
  #7 (permalink)  
Старый 17.01.2017, 17:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Лучше тогда не 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)
Ответить с цитированием
  #8 (permalink)  
Старый 17.01.2017, 17:15
Аватар для RoyalHunt
Интересующийся
Отправить личное сообщение для RoyalHunt Посмотреть профиль Найти все сообщения от RoyalHunt
 
Регистрация: 17.01.2017
Сообщений: 16

Сообщение от laimas Посмотреть сообщение
Лучше тогда не 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 в своей голове.

Спасибо большое!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание массива из пронумерованных объектов Arthur_miko Общие вопросы Javascript 7 17.02.2016 12:41
Массив объектов voodoo_dn Общие вопросы Javascript 8 26.12.2014 15:44
Массив объектов doox911 Библиотеки/Тулкиты/Фреймворки 6 16.01.2014 22:36
Создание своей библиотеки. Создание двух одинаковых объектов. Как избежать? IDCh Javascript под браузер 2 31.10.2012 12:53
Массив объектов или объект объектов vladlen Общие вопросы Javascript 19 30.10.2010 03:10