Вы хотите, чтобы фильтровать исходный массив.
var a = [ 1 , 3 , 4 , {roll:3} , 7 , 8 , {roll:2} , 9 ];
var b = a.filter(function(element) { return Number(element) === element; });
var c = a.filter(function(element) { return Number(element) !== element; });
Суть в том, как различать два вида элементов массива: тест я мог бы перефразировать как «если отливка элемента в номер производит сам элемент, это число». Обнаружение типа в javascript - это классно чреватый проект, и я не буду вдаваться в него здесь; см. Douglas Crockford's Javascript: хорошие детали для расширенного обсуждения темы с отличным примером кода. Основываясь на типах элементов, которые вы ожидаете найти в своем массиве, вам может потребоваться выбрать более сложный дискриминатор. Вы легко можете проверить эти вещи в javascript-консоли браузера. Я сделал это, чтобы проверить мой тест:
> Number(4) === 4
< true
-
Этот подход перебирает исходного массива в два раза. Если вы заботитесь о производительности - это будет проблемой только в том случае, если исходный массив содержит десятки тысяч элементов в нем или если ваш тест очень дорог, то вы можете выполнить тот же результат с помощью forEach
, который проверяет каждый элемент и присоединяет его к одному из двух выходных массивов (или reduce
, который испускает что-то вроде { numbers: [], items: {}}
).
-
META: ваш заголовок не велик. Если вы не приложите некоторые усилия к своим вопросам, вы не должны ожидать больших усилий в форме ответов. Мы все делаем из доброты наших чистокровных буррито. ;)
Вы должны иметь лучшие названия, и пытались ли вы что-нибудь? –