Включить объект 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?
Ответы
Ответ 1
Я уверен, что это не проблема типа, потому что у IE не было функции Array.map()
до IE 9. См. http://msdn.microsoft.com/en-us/library/k4h76zbx(v=VS.85).aspx для списка поддерживаемых функций. См. http://msdn.microsoft.com/en-us/library/ff679976(v=VS.94).aspx для описания функции Array.map()
в IE 9.
Ответ 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; });
Ответ 4
Год назад, но я могу также упомянуть функцию jQuery makeArray http://api.jquery.com/jQuery.makeArray/
Ответ 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();
Ответ 6
Среди многих небольших утилит для манипулирования объектами и массивами Underscore.js предлагает вспомогательный метод toArray(obj)
. Документация здесь: http://underscorejs.org/#toArray
Это не совсем очевидно из того, как написана документация, но она работает как шарм на произвольных объектах. При задании объекта он выполняет итерацию над значениями и возвращает список, содержащий только эти значения.