Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2016, 12:59
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

Сравнение массивов / вывести остаток
Привет!

Прошу помощи разобраться с вопросом:
пишу функцию, которая возвращает не использованые числа из массива, например

unused( 32, 90, 44 ) // сравниваем с массивом [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] 
и возвращаем строку "15678"


function unused(){
	


	for ( var n = 0; n < arguments.length; n ++ ) {

		var args = Array.prototype.slice.call(arguments);

		console.log( args )//[ 32, 90, 44 ]
				
		var arr = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
	
		var newArr = [];

		var sNum = arguments[ n ].toString();


		for ( var i = 0; i < sNum.length; i ++ ) {


		    newArr.push( +sNum.charAt( i ) );


		}


		var rest = arr.filter( i => newArr.indexOf( i ) < 0 );

		var result = rest.toString().replace( /\,/g,"" );


		console.log( newArr )//[ 3, 2 ], [ 9, 0 ], [ 4, 4 ]

		console.log( result )//не использованые числа
  	}

}

unused( 32, 90, 44 )



Переданные функции аргументы ( 32, 90, 44 ) мне нужно вывести для сравнения внутри функции одним массивом вида [ 3, 2, 9, 0, 4, 4 ].

По факту получается либо [ 32, 90, 44 ], либо отдельно [ 3, 2 ], [ 9, 0 ], [ 4, 4 ]. Оба варианта не подходят, т.к. в первом случае нет разбивки на отдельные цифры из которых состоят числа, в во втором случае каждый аргумент обрабатывается отдельно как массив, массивы аргументов не суммируются.
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2016, 13:27
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Alexander Belov,
<script>
        function unused() {
            var output = []
            for (var n = 0; n < arguments.length; n++) {
                var sNumber = arguments[n].toString();
                for (var i = 0, len = sNumber.length; i < len; i += 1) {
                    output.push(+sNumber.charAt(i));
                }
            }
            alert(output); // [3,2,9,0,4,4]

            // что-то делаем с output
        }
        unused(32, 90, 44);
    </script>
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2016, 14:13
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

destus,
Благодарю! Разобрался.
Ответить с цитированием
  #4 (permalink)  
Старый 23.02.2016, 14:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112


function unused() {
            var output = [].slice.call(arguments).join().split(/\D+|/)
            alert(output); // [3,2,9,0,4,4]
            // что-то делаем с output
        }
        unused(32, 90, 44);
Ответить с цитированием
  #5 (permalink)  
Старый 23.02.2016, 15:35
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

'use strict';

function unused(...args) {
  let alphabet = new Set('0123456789'.split(''));
  let used = new Set(args.join().split(''));
  let difference = [...alphabet].filter(x => !used.has(x));
  return difference;
}

alert(unused(32, 90, 44));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 23.02.2016, 16:12
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

рони,
читер
Ответить с цитированием
  #7 (permalink)  
Старый 23.02.2016, 18:07
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

alert([32, 90, 44].toString().split(/\D|/));
Ответить с цитированием
  #8 (permalink)  
Старый 23.02.2016, 18:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Poznakomlus,
с arguments так не выйдет
Ответить с цитированием
  #9 (permalink)  
Старый 23.02.2016, 18:22
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

да знаю что arguments не массив
но ведь никто не запрещает передать массив в виде аргумента
Ответить с цитированием
  #10 (permalink)  
Старый 23.02.2016, 22:03
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Array.prototype.unused = function(arr){
		var digital = this.join();
		return arr.filter(function(value){
				return digital.indexOf(value) === -1;
		});
};
alert([32, 90, 44].unused([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]));
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение элементов массивов nesfiraty Общие вопросы Javascript 20 13.01.2015 19:23
Как вывести дату, чтобы не повторять скрипт пару раз xXapokalypsesXx Общие вопросы Javascript 10 27.06.2013 13:43
Таблица Приход Расход Остаток на Jquery tomas_veron jQuery 1 17.01.2013 01:22
Сравнение в массиве массивов dima*** Общие вопросы Javascript 29 21.12.2012 13:13
сравнение массивов bot87 Общие вопросы Javascript 4 22.09.2012 01:31