Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сложение всех элементов двух массивов. (https://javascript.ru/forum/misc/43321-slozhenie-vsekh-ehlementov-dvukh-massivov.html)

sharun 01.12.2013 17:18

Сложение всех элементов двух массивов.
 
Приветствую. Я новичок в JS и не совсем понимаю, как работать с массивами. Передо мной стоит задача: сложить соответствующие элементы двух массивов и создать из них третий. Например: у нас есть два массива
var arr = [1, 5, 4]
var arr2 = [4, 3, 2]

Значит, третий массив должен быть с данными [5,8,6]. Как можно такое реализовать? Желательно с пояснениями.

lord2kim 01.12.2013 17:23

sharun, по хорошему вам стоит начать с учебника, т.к. не разобравшись в основах дальше будет все сложнее и сложнее...
var arr = [1, 5, 4], arr2 = [4, 3, 2], arr3 = [];

for (i=0; i < arr.length; i++) { // цикл по всем элементам массива(-ов) (в данном случае учитывается что массивы равны по длине)
	arr3.push(arr[i]+arr2[i]); // метод push() добавляет элемент(-ы) в конец массива, в данном случае сумму i-ых элементов первого и второго массивов
}

alert(arr3);

sharun 01.12.2013 17:27

Спасибо, учту.

Maxmaxmaximus3 01.12.2013 18:58

более правильный способ)
var arr = [1, 5, 4]
var arr2 = [4, 3, 2]

var arr3 = arr.map(function(value, index){ return value + arr2[index] })

alert(arr3)



п.с. правильный потому что map семантически говорит человеку о том что щас будет происходить, а код функции говорит как именно это будет происходить.

lord2kim 01.12.2013 19:04

Maxmaxmaximus3, но не забывай говорить, что данный метод в IE по умолчанию отсутствует...(((

Maxmaxmaximus3 01.12.2013 19:12

правильно поддерживать текущую версию браузера и предпоследнюю, щас 11, предпоследняя 10, девятку уже можно не поддерживать но И ТАМ метод был. ты немного в прошлом застрял парень)

рони 01.12.2013 19:17

:)
var arr = [1, 5, 4]
var arr2 = [4, 3, 2]
alert((+arr.join('')+ +arr2.join('')+'').split(''))

lord2kim 01.12.2013 19:24

Maxmaxmaximus3, мб мб...но как ни крути на Windows 8 люди не тянутся переходить...а в 7-ке по умолчанию IE 8 к сожалению(((

Maxmaxmaximus3 01.12.2013 21:20

Сколько процентов людей использует ie8?
Сколько из них делают это потому что домохозяйки а не потому что они на работе а там админ не разрешает менять?
вот и поговорили

Цитата:

Сообщение от lord2kim
.но как ни крути на Windows 8 люди не тянутся

на чем основано это утверждение?

danik.js 01.12.2013 21:20

рони, очевидно, твой способ будет работать только если сумма каждой пары не перевалит за десятку. И беда если первые пары будут нулями.

Maxmaxmaximus3 01.12.2013 21:21

danik.js, раз очевидно зачем говоришь?

lord2kim 01.12.2013 21:49

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 283829)
Сколько из них делают это потому что домохозяйки а не потому что они на работе а там админ не разрешает менять?

вторых больше...и к сожалению их достаточно, чтобы не забывать учитывать IE8...

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 283829)
на чем основано это утверждение?

из личного опыта, а также из отзывов людей в жизни/инете установивших 8-ку на пару тройку дней и вернувшихся на 7-ку и/или XP из-за не знания сфота, для возвращения меню пуск к привычному варианту...

Maxmaxmaximus3 01.12.2013 22:11

Цитата:

Сообщение от lord2kim
вторых больше...

а всего в процентах сколько)?

Цитата:

Сообщение от lord2kim
из личного опыта, а также из отзывов людей в жизни/инете установивших 8-ку на пару тройку дней и вернувшихся на 7-ку и/или XP из-за не знания сфота, для возвращения меню пуск к привычному варианту...

возможно ли что статистическая выборка слишком мала чтобы делать подобные выводы? и если нет, то почему?

kobezzza 01.12.2013 22:18

Ребят, о чём вы говорите? Нужно поддерживать свою аудиторию, а не сферического коня в вакууме. В Китае например активно юзается ИЕ6, но это же не значит, что ВСЕ сервисы нужно делать под ИЕ6. К примеру большинство сервисов Яндекса тестируется сейчас под ИЕ10/11 (я это знаю, т.к. сам работал там), а остальные объявлены не поддерживаемыми, тоже самое в Гугл.

Поддерживаются только те сервисы, где это критично, а слепой грейсфул деградейшн - это идиотизм. Нормально - это анализировать свой сервис и аудиторию, и составлять ТЗ исходя из этого.

Рассказ про одного богатого клиента с ИЕ6 который зашёл на магазин цветов - это бредни бестолковых менеджеров :D Так можно и поддержку Мозаика сделать, а что, вдруг самый богатый человек использует его и непременно захочет зайти на ваш сайт.

lord2kim 01.12.2013 22:27

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 283835)
а всего в процентах сколько)?

в таком случае можно и не задумываться об IE вовсе))

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 283835)
возможно ли что статистическая выборка слишком мала чтобы делать подобные выводы? и если нет, то почему?

не только возможно, а так оно и есть...хотя 8-ку можно сравнить с Vista во времена последней (ИМХО)...но как ни крути далеко не все конторы стремятся закупать 7-ку за ненадобностью и, соответственно, предпочитают оставаться на XP
в последнем выборка достаточно велика, т.к. закупка новой системы означает также и апгрейд железа (не во всех случаях)...'"так зачем платить больше?" (c) реклама', если на компах установлено 512Мб памяти для запуска Word, Excel, блокнота и еще пятка специфического софта...

kobezzza 01.12.2013 22:33

Цитата:

в таком случае можно и не задумываться об IE вовсе))
Современный ИЕ отличный браузер и шутят про него сейчас разве что слоупоки люди далёкие от ИТ, пора завязывать ;)

Цитата:

Сообщение от lord2kim (Сообщение 283838)
если на компах установлено 512Мб памяти для запуска Word, Excel, блокнота и еще пятка специфического софта...

И зачем им нужен супер веб 4.0 сервис с блекджеком и WebGL? Делаешь простой олдскульный сервис для них и никаких проблем, можно даже вёрстку тупо захардкодить под древнего ишака, чтобы не парится. А если они не твоя аудитория, то зачем тебе нужна поддержка для них?

lord2kim 01.12.2013 22:48

Цитата:

Сообщение от kobezzza (Сообщение 283839)
Современный ИЕ отличный браузер и шутят про него сейчас разве что слоупоки люди далёкие от ИТ, пора завязывать ;)

вполне с этим согласен

Цитата:

Сообщение от kobezzza (Сообщение 283839)
И зачем им нужен супер веб 4.0 сервис с блекджеком и WebGL? Делаешь простой олдскульный сервис для них и никаких проблем, можно даже вёрстку тупо захардкодить под древнего ишака, чтобы не парится. А если они не твоя аудитория, то зачем тебе нужна поддержка для них?

как бы то ни было странно некоторые заказчики до сих пор просят поддержку IE6 включительно...
но ИМХО...ориентироваться на IE8 смысл есть...

kobezzza 01.12.2013 22:57

Цитата:

Сообщение от lord2kim (Сообщение 283842)
как бы то ни было странно некоторые заказчики до сих пор просят поддержку IE6 включительно...
но ИМХО...ориентироваться на IE8 смысл есть...

Это другое дело. Когда я фрилансил поддержка ИЕ6-7 для меня была дополнительные 10-15к сверху за каждую версию и я был только рад таким желанием клиента, ибо кто платит - тот и заказывает музыку:)

Цитата:

Сообщение от lord2kim (Сообщение 283842)
но ИМХО...ориентироваться на IE8 смысл есть...

Повторюсь, ориентироваться надо на свою аудиторию и если она юзает ИЕ 5.5, то делать под него :)

Maxmaxmaximus3 01.12.2013 23:53

Цитата:

Сообщение от kobezzza
Рассказ про одного богатого клиента с ИЕ6 который зашёл на магазин цветов - это бредни бестолковых менеджеров

ОО ДААА!! ЕДИНОМЫШЛЕННИК11111

Цитата:

Сообщение от lord2kim
не только возможно, а так оно и есть...хотя 8-ку можно сравнить с Vista во времена последней (ИМХО)...но как ни крути далеко не все конторы стремятся закупать 7-ку за ненадобностью и, соответственно, предпочитают оставаться на XP
в последнем выборка достаточно велика, т.к. закупка новой системы означает также и апгрейд железа (не во всех случаях)...'"так зачем платить больше?" (c) реклама', если на компах установлено 512Мб памяти для запуска Word, Excel, блокнота и еще пятка специфического софта...

верно ли я понимаю что на твой сайт люди будут заходить с работы за место того чтобы работать???? такова твоя задумка? то есть у них будет в кармане мобила где все летает, но они будут сидеть С РАБОЧЕГО КОМПА ЧЕРЕЗ ИШАК?

Цитата:

Сообщение от lord2kim
как бы то ни было странно некоторые заказчики до сих пор просят поддержку IE6 включительно...

на чем основано это утверждение?

kobezzza 02.12.2013 02:30

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 283869)
на чем основано это утверждение?

Ну такое реально бывает, но какая разница если за это платят, а ты простой исполнитель?) Может сервис для Китая, где ИЕ6 всё ещё мейнстрим, или заказчик просто идиот:)

lord2kim 02.12.2013 10:07

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 283869)
верно ли я понимаю что на твой сайт люди будут заходить с работы за место того чтобы работать???? такова твоя задумка? то есть у них будет в кармане мобила где все летает, но они будут сидеть С РАБОЧЕГО КОМПА ЧЕРЕЗ ИШАК?

нет, не верно. нет, не такова. мобила будет, но никто не сказал что на ней все будет летать...

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 283869)
на чем основано это утверждение?

на опыте...ибо таковое встречается до сих пор...

Maxmaxmaximus3 02.12.2013 13:23

Ой, а можешь пример на скорую руку вспомнить? =) и сколько платили

kobezzza 02.12.2013 15:07

Цитата:

Когда я фрилансил поддержка ИЕ6-7 для меня была дополнительные 10-15к сверху
Писал же.

Прост когда договариваешься о работе, нужно заранее эти вещи обсудить, чтобы потом внезапно не всплыло, что он думал, что всё должно быть включено заранее. А если человек хочет и платит за это, то кто я такой чтобы его отговаривать?) Зачем мне знать зачем ему это нужно: может и вправду нужно, а может и нет, какая разница :)

shtazzy 14.05.2018 14:19

Цитата:

Сообщение от lord2kim (Сообщение 283782)
sharun, по хорошему вам стоит начать с учебника, т.к. не разобравшись в основах дальше будет все сложнее и сложнее...
var arr = [1, 5, 4], arr2 = [4, 3, 2], arr3 = [];

for (i=0; i < arr.length; i++) { // цикл по всем элементам массива(-ов) (в данном случае учитывается что массивы равны по длине)
	arr3.push(arr[i]+arr2[i]); // метод push() добавляет элемент(-ы) в конец массива, в данном случае сумму i-ых элементов первого и второго массивов
}

alert(arr3);

Cпасибо за простое решение! Хотя оно и устаревшее, я так думаю, ведь сейчас модно использовать функциональные методы массивов. :) Но меня интересует другое в этом решении: как js "подхватывает" элементы второго массива (arr2[i]), если мы перебираем первый arr. Кто-нибудь может дать понятное объяснение? Заранее благодарен! :thanks:

Dilettante_Pro 14.05.2018 14:36

Цитата:

Сообщение от shtazzy
мы перебираем первый arr

В операторе for (i=0; i < arr.length; i++) мы не перебираем первый arr, а задаем i от 0 до i < arr.length
Внутри цикла по заданному i берем элементы массивов arr[i]+arr2[i],
т.е. arr[0]+arr2[0], arr[1]+arr2[1] .....

Nexus 14.05.2018 14:41

Цитата:

Сообщение от shtazzy
как js "подхватывает" элементы второго массива (arr2[i]), если мы перебираем первый arr

Оба массива определены и доступны в цикле, длинна массивов одинаковая, ключи совпадают.
Цикл for после каждой итерации увеличивает значение переменной i на 1.
Значение переменной i будет являться корректным ключом для обоих массивов.

ps. не видел поста Dilettante_Pro.

Dilettante_Pro 14.05.2018 14:46

Цитата:

Сообщение от Nexus
не видел поста

Такое часто бывает... Ничего: повторение - мать учения

ruslan_mart 14.05.2018 15:38

Не очень удачный пример. i вообще не определена.

var arr1 = [1, 5, 4], arr2 = [4, 3, 2, 5], arr3 = [];

var length = Math.max(arr1.length, arr2.length);

for(var i = 0; i !== length; i++) {
   arr3.push((i in arr1 ? arr1[i] : 0) + (i in arr2 ? arr2[i] : 0));
}

alert( arr3 );


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