Сравнение массивов / вывести остаток
Привет!
Прошу помощи разобраться с вопросом: пишу функцию, которая возвращает не использованые числа из массива, например 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 ]. Оба варианта не подходят, т.к. в первом случае нет разбивки на отдельные цифры из которых состоят числа, в во втором случае каждый аргумент обрабатывается отдельно как массив, массивы аргументов не суммируются. |
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> |
destus,
Благодарю! Разобрался. |
:)
function unused() { var output = [].slice.call(arguments).join().split(/\D+|/) alert(output); // [3,2,9,0,4,4] // что-то делаем с output } unused(32, 90, 44); |
'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)); |
рони,
читер :) |
alert([32, 90, 44].toString().split(/\D|/)); |
Poznakomlus,
с arguments так не выйдет |
да знаю что arguments не массив
но ведь никто не запрещает передать массив в виде аргумента |
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 ])); |
Часовой пояс GMT +3, время: 14:09. |