Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Определить тип массива (https://javascript.ru/forum/misc/21789-opredelit-tip-massiva.html)

Andrei 24.09.2011 11:32

Определить тип массива
 
Здравствуйте!

Подскажите как отличить обычный массив от ассоциативного ?

var a = [1,2,3,4,5];
var b = {'var1':1, 'var2':2}

B@rmaley.e><e 24.09.2011 11:43

Для начала прочитать это: http://alljs.ru/articles/array/whatis

Sweet 24.09.2011 12:49

Однозначно, учить основы! По теме:
if( !Array.isArray ) Array.isArray = function(){
  return Object.prototype.toString.call( arguments[ 0 ] ) == "[object Array]";
};

var a = [1,2,3,4,5]; 
var b = {'var1':1, 'var2':2};

alert([ Array.isArray( a ), Array.isArray( b ) ]);

melky 25.01.2012 22:47

Цитата:

Сообщение от Andrei (Сообщение 127879)
Подскажите как отличить обычный массив от ассоциативного ?

в JS нет ассоциативных массивов. То, что вы считаете за оное, является объектом. А точнее, хешем.

FINoM 26.01.2012 04:40

Цитата:

Сообщение от melky
в JS нет ассоциативных массивов

Эм, а как отличить объект от ассоциативного массива или хеша? Мне вот крайне трудно догнать эту разницу в том же php (за исключением, что объект создается конструктором).

Livanderiaamarum 26.01.2012 05:26

Цитата:

Сообщение от FINoM (Сообщение 152925)
Эм, а как отличить объект от ассоциативного массива или хеша? Мне вот крайне трудно догнать эту разницу в том же php (за исключением, что объект создается конструктором).

обьект это сущность таблица из двух стобликов (свойства - значения) свойства, методы.

Ассоц-массив это таблица из двух стобликов (слово - ассоциация)

хэш это таблица из двух столбцов (ключ - значение)




В ДАННОМ СЛУЧАЕ В JS это одно и то же! Всем привет!

nerv_ 26.01.2012 12:28

var a = [1, 2, 3, 4, 5];		// массив
var b = { var1: 1, var2: 2 };	// объект, который может выступать как ассоциативный массив

alert(a instanceof Array);		// true
alert(b instanceof Object);		// true

// при этом
alert(a instanceof Object);		// true

Livaanderiamarum 26.01.2012 12:37

Ну обьект я имею ввиду не как Класс, а как сама суть устройство!
Классы то ясен хрен наследуют))

То есть a в данном случае имеет дедушку Object/ Оператор доходит до Array? смотрит, не, не то, идет дальше, смотрит , да, во во, то! И выдает тру!

a => Array => Object

Livaanderiamarum 26.01.2012 12:43

Щас обьясню в чем разница в стиле моей книги)
ХЭШ это фигня которую придумали люди, абстракция)
это просто название)

хэшэм может работать все из двух столбцов , где правое значение в строчке логически соответствует левому! Даже долбанный массив обычный можно понимать как хэш.


В ДАННО СЛУЧАЕ это просто игра слов!
А то что люди говорят - это не то, это другое, это выевыемоны) можешь их даже не слушать и не напрягать мозг)

я обьяснил что это такое, нет в js ни хешей нет ни ассоц массивов) ни чего этого нет.

Дело в том что это все одно и то же, ПОТОМУ ЧТО РАБОТАЕТ ОДИНАКОГО ПРОСТО НАЗВАНИЯ РАЗНЫЕ, да и обьекты в js с этим тоже одно и то же отому что подходят под описание этих хешей, ассоц массивов и.т.п.)
вот.

Kolyaj 26.01.2012 14:42

Цитата:

Сообщение от FINoM
Эм, а как отличить объект от ассоциативного массива или хеша?

Как отличить кошку от кошки, а белку от белки? Объекты в JS это и есть хеши.

Gozar 26.01.2012 15:51

Цитата:

Сообщение от FINoM (Сообщение 152925)
Эм, а как отличить объект от ассоциативного массива или хеша? Мне вот крайне трудно догнать эту разницу в том же php (за исключением, что объект создается конструктором).

У объекта есть методы, у ассоциативного массива их нет.

FINoM 26.01.2012 16:04

Цитата:

Сообщение от Gozar
У объекта есть методы, у ассоциативного массива их нет.

Получается, чистые ассоциативные массивы есть только в процедурных языках, типа php?

trikadin 26.01.2012 16:16

Цитата:

Сообщение от FINoM
Получается, чистые ассоциативные массивы есть только в процедурных языках, типа php?

PHP поддерживает объектную парадигму, поэтому говорить о нём как о строго процедурном языке нельзя.

Строго говоря, js - объектный язык, так как все типы данных, кроме примитивных (и то, те имеют обёртку) являются объектными. Поэтому да, тут стёртая граница между объектами и ассоциативными массивами. А в С++, например, объект - это экземпляр класса, а ассоциативный массив - это, фактически, обычный массив, в котором доступ осуществляется по произвольному ключу (а не только по числовому).

FINoM 26.01.2012 16:34

Цитата:

Сообщение от trikadin
PHP поддерживает объектную парадигму, поэтому говорить о нём как о строго процедурном языке нельзя.

PHP — процедурный, не объектно ориентированный язык с реализацией ООП.

Livaanderiamarum 26.01.2012 16:40

Цитата:

Сообщение от Gozar (Сообщение 153027)
У объекта есть методы, у ассоциативного массива их нет.

С чего это? Функция не ДАННЫЕ? Не обьект первого класса)?

Gozar 26.01.2012 17:29

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153037)
С чего это?

С того. Чего нет, того нет. Найдешь - покажи.

На остальное отвечать нет смысла, т.к. вопрос по сути не ко мне, а к идеологам или разработчиками языков.

melky 26.01.2012 17:31

Цитата:

Сообщение от Gozar (Сообщение 153027)
У объекта есть методы, у ассоциативного массива их нет.

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153037)
С чего это? Функция не ДАННЫЕ? Не обьект первого класса)?

не увидел связи вопроса с сообщением.

Livaanderiamarum 26.01.2012 17:51

melky,

Есть ключи и есть данные на против них.

Если на против лежит функция КТО СКАЗАЛ ЧТО ЭТО МЕТОД?
Это данные! Мы можем их получить, сохранить и передать, можем даже вызвать оператором (), но тогда это будет уже метод, а нам этого не нужно чтобы не потерять идеологию ассоц-массива, и использовать обьект именно как ассоц-массив.


Gozar под методом подразумевал ФУНКЦИЮ ЛЕЖАЩУЮ В СВОЙСТВЕ), ну по крайней мере я так понял.


п.с. все в js имеет метод .toString(), в js не может быть ассоц массивов.. потому что в js все имеет метод .toString() тогда так получается)?

Gozar 26.01.2012 17:54

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153064)
melky,
функция это метод)
- я думаю виднее стало?

Кому стало виднее и что? Ты выражаешься так, что невозможно понять что ты хотел сказать. На форуме почти всем очевидно что функция это метод.

Какое отношение имеют твои слова к тому, что у асс. массивов нет методов. Функций у них тоже нет, кстати.

Gozar 26.01.2012 17:55

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153064)
Есть ключи и есть данные на против них.

Если на против лежит функция КТО СКАЗАЛ ЧТО ЭТО МЕТОД?
Это данные! Мы можем их получить, сохранить и передать, можем даже вызвать оператором (), но тогда это будет уже метод.

Ничего ты не можешь вызвать в асс. массиве.

Livaanderiamarum 26.01.2012 18:00

Цитата:

Сообщение от Gozar
Ничего ты не можешь вызвать в асс. массиве.

ты глупый что ли?????? прочитай мой пост еще раз ПО БУКВАМ.
Может я КРИВО ВЫРАЗИЛСЯ что мы ни чего не можем вызывать в ассоц массиве, по этому ты это ЕЩЕ РАЗ ЭТО НАПИСАЛ как бы поддакивая мне?

Livaanderiamarum 26.01.2012 18:02

Так хорошо, щас ты отпишешься на все верхние сообщений, потом удали эти отписи, там путаница, давай заного, отвечай только НА ЭТО

В ассоц массивах не может быть методов, источник?

Gozar 26.01.2012 18:18

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153067)
ты глупый что ли?????? прочитай мой пост еще раз ПО БУКВАМ.
Может я КРИВО ВЫРАЗИЛСЯ что мы ни чего не можем вызывать в ассоц массиве, по этому ты это ЕЩЕ РАЗ ЭТО НАПИСАЛ как бы поддакивая мне?

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153069)
Так хорошо, щас ты отпишешься на все верхние сообщений, потом удали эти отписи, там путаница, давай заного, отвечай только НА ЭТО

В ассоц массивах не может быть методов, источник?

В массивах вообще не может быть методов, методы есть только в объектах. Источник не нужен, это не фантастика чтобы доказывать что-то. Ты просто не можешь вызвать метод массива, т.к. там нет ни одного.

melky 26.01.2012 18:18

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153067)
ты глупый что ли?????? прочитай мой пост еще раз ПО БУКВАМ.
Может я КРИВО ВЫРАЗИЛСЯ что мы ни чего не можем вызывать в ассоц массиве, по этому ты это ЕЩЕ РАЗ ЭТО НАПИСАЛ как бы поддакивая мне?



ЗЫ. пожалуйста, закройте тему. пусть ведут интеллектуальную беседу в личных сообщениях.

Gozar 26.01.2012 18:20

Именно по этому в php делается так:
count($arr);

Gozar 26.01.2012 18:24

Цитата:

Сообщение от melky (Сообщение 153081)
пусть срутся ведут интеллектуальную беседу в личных сообщениях.

Во первых я не срусь, во вторых не груби.

melky 26.01.2012 18:25

Цитата:

Сообщение от Gozar (Сообщение 153087)
Во первых я не срусь, во вторых не груби.

поправил пост. Прошу прощения, если как-то задел.

Livaanderiamarum 26.01.2012 18:35

Цитата:

Сообщение от Gozar
ы просто не можешь вызвать метод массива, т.к. там нет ни одного


ну давайте сделаем фантастику фантстикой

q = [1,2,3,4,5,6,7, "восемь"] - массив?
да, это массив, вектор... ок.. продолжаем..

q = [1,2,3,4,5,6, function(){alert('семь')}] - это массив?

FINoM 26.01.2012 18:41

Цитата:

Сообщение от Livaanderiamarum
q = [1,2,3,4,5,6,7, "восемь"] - массив?

В JS нет массивов в традиционном смысле этого слова, есть только объекты с ключами в виде чисел и дополнительными методами и свойствами.

inst 26.01.2012 18:43

Чувак ТС по ходу знатный тролль :)

Gozar 26.01.2012 18:50

Цитата:

Сообщение от Livaanderiamarum (Сообщение 153092)
ну давайте сделаем фантастику фантстикой

q = [1,2,3,4,5,6,7, "восемь"] - массив?
да, это массив, вектор... ок.. продолжаем..

q = [1,2,3,4,5,6, function(){alert('семь')}] - это массив?

Не сделаем.

var q = [1,2,3,4,5,6, function(){alert('семь')}];
alert(typeof q);

Gozar 26.01.2012 19:04

Вот так и разбиваются девичьи мечты о суровую реальность :)

Livaanderiamarum 26.01.2012 19:20

Цитата:

Сообщение от Gozar (Сообщение 153100)
Не сделаем.

var q = [1,2,3,4,5,6, function(){alert('семь')}];
alert(typeof q);



да.... это не массив, век живи век учись))))

trikadin 26.01.2012 20:40

Цитата:

Сообщение от FINoM
PHP — процедурный, не объектно ориентированный язык с реализацией ООП.

Ну... Википедия считает несколько иначе)) Как и я.

А насчёт этого спора... Моё мнение:

a= {}; // хеш, асс. массив и т.д.
b= new Error(); // объект

FINoM 26.01.2012 21:32

Цитата:

Сообщение от trikadin
a= {}; // хеш, асс. массив и т.д.

А это?
new Object({a:3})

Gozar 26.01.2012 21:38

А меня не напрягает называть объект - объектом ;)

trikadin 26.01.2012 21:55

Цитата:

Сообщение от FINoM
А это?
new Object({a:3})

Объект)

Цитата:

Сообщение от Gozar
А меня не напрягает называть объект - объектом

Меня тоже) Меня понимают.

Livaanderiamarum 27.01.2012 02:33

Цитата:

Сообщение от Gozar (Сообщение 153139)
А меня не напрягает называть объект - объектом ;)

Ну что вы, называть массив массивом вобще преступление) ваши кропотливые опыты доказали что массив то на самом деле не массив, а ОБЪЕКТ!!!!


Часовой пояс GMT +3, время: 05:11.