Подтвердить что ты не робот

Включить объект javascript в массив. Как?

Я сделал этот тест для песочницы:

<html>
    <head>
        <title>whatever</title>
        <script type="text/javascript">
            function myLittleTest() {
                var obj, arr, armap;

                arr = [1, 2, 3, 5, 7, 11];

                obj = {};
                obj = arr;
                alert (typeof arr);
                alert (typeof obj);

                // doesn't work in IE
                armap = obj.map(function (x) { return x * x; });
                alert (typeof armap);

            }
            myLittleTest();
        </script>
    </head>
    <body>
    </body>
</html>

Я понимаю, что могу использовать функцию jQuery $.map для создания этой строки кода, но, что мне не хватает в jat файлах datatypes?

4b9b3361

Ответ 2

Если у вас есть подобный массиву объект (например, arguments, например), вы можете получить реальный массив, сделанный из него, вызывая Array.prototype.slice.call(o).

var o = {0:"a", 1:'b', length:2};
var a = Array.prototype.slice.call(o);

a будет ["a", "b"]. Это будет работать только в том случае, если у вас правильно установлено свойство length.

Ответ 3

Я думаю, вы слишком стараетесь...

Это проще всего с jQuery (или подобной библиотекой)

Для этого объекта:

var obj = {a: 1, b: 2, c: 3};

Массивы имеют фиксированную ключевую систему, поэтому для объекта выше вы должны выбросить либо ключи (a, b, c), либо значения (1, 2, 3)

Итак, либо это:

var arr = $.map(obj, function (value, key) { return value; });

или это:

var arr = $.map(obj, function (value, key) { return key; });

Ответ 5

Используйте цикл for для максимальной совместимости браузеров.

В Javascript все массивы - это объекты, но не все объекты являются массивами. Взгляните на эта страница Perfection Kills, которая описывает, как проверить, что что-то является массивом.

Чтобы проверить массив, вы можете использовать Object.prototype.toString.call(theObject). Это возвращает [object Array] для объекта, который является массивом и [object Object] для объекта, а не массива (см. Пример ниже):

            function myLittleTest() 
            {
                var obj, arr, armap, i;    

                  // arr is an object and an array
                arr = [1, 2, 3, 5, 7, 11]; 

                obj = {}; // obj is only an object... not an array

                alert (Object.prototype.toString.call(obj));
                  // ^ Output: [object Object]

                obj = arr; // obj is now an array and an object

                alert (Object.prototype.toString.call(arr));
                alert (Object.prototype.toString.call(obj));
                  // ^ Output for both: [object Array]

                // works in IE
                armap = [];
                for(i = 0; i < obj.length; ++i)
                {
                    armap.push(obj[i] * obj[i]);
                }

                alert (armap.join(", ")); 

            }
            // Changed from prueba();
            myLittleTest();

Пример jsFiddle

Ответ 6

Среди многих небольших утилит для манипулирования объектами и массивами Underscore.js предлагает вспомогательный метод toArray(obj). Документация здесь: http://underscorejs.org/#toArray

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