Перейти к содержимому

Фото
- - - - -

Массивы JS


  • Вы не можете создать новую тему
  • Please log in to reply
4 ответов в этой теме

#1 StrikeR

StrikeR

    бугога

  • Постоялец
  • 778 сообщений
  • Откуда:QLD. Australia

Отправлено 20 Декабрь 2007 - 11:44

т.к. ActionScript похож на ЯваСкрипт, то помощь может придти как и на AS так и на JS - мне без разницы)

имеем массив:
var A:Array=["test1", "test1", "test1", "test222", "test1"];

Как видно из массива, слов с test1 у нас 4 штуки, а test222 - 1 штука.
Так же имеем ещё один массив, например B.
Так вот, помогите плз написать ф-цию, которая считывала бы массив A и записывала в массив B только по одному разу имеющихся вариантов из A и его кол-во. Т.е. на выходе массив B должен выглядеть примерно так

test1-4,test222-1

честно, замучился уже :( по идее это не сложно, но я так и не допёр как это сделать.

Заранее спасибо

Сообщение изменено: StrikeR (20 Декабрь 2007 - 11:50 )

  • 0

#2 StrikeR

StrikeR

    бугога

  • Постоялец
  • 778 сообщений
  • Откуда:QLD. Australia

Отправлено 20 Декабрь 2007 - 12:37

ура, вопрос решился:) большое спасибо Серёге с webteam'a.
Если кому интересно:

var A:Array=["test1", "test1", "test1", "test222", "test1"];
var B = new Array();
var index = 0;
for (x in A) {
  var founded = false;
  for (y in B) {
	if (A[x]==B[y]) {
	  founded = true;
	}
  }
  if (!founded) {
	B[index] = A[x];
	index++;
  }
}
var counter = 0;
for (x in B) {
  counter = 0;
  for (y in A) {
	if (B[x]==A[y]) {
	  counter++;
	}
  }
  B[x] = B[x] + "-" + counter;
}

  • 0

#3 zedirtybastard

zedirtybastard
  • Пользователь
  • 499 сообщений

Отправлено 20 Декабрь 2007 - 14:43

блин бред, почему не использовать свойство уникальности ключей хэша?
var A=["test1", "test1", "test1", "test222", "test1"];
var B = new Array();

for (var i in A) {
  var val = A[i];
   if (B[val] != null) {
	  B[val]++;
   } else {
	  B[val] = 1;
   }
}

for (var x in B) {
   alert(x + " and " + B[x]);
}

Ну или если покороче, то:
var A=["test1", "test1", "test1", "test222", "test1"];
var B = new Array();
var Final = new Array(); // Это если надо сделать немного по другому, как у Сереги :)

for (var i in A) {
   (B[A[i]])++ || ((B[A[i]])=1);
}

for (var x in B) {
   alert(x + " and " +B[x]);
   Final.push(x + "-" + B[x]); // вот и будет нужный массив
}

Сообщение изменено: zedirtybastard (20 Декабрь 2007 - 15:22 )

  • 0

#4 StrikeR

StrikeR

    бугога

  • Постоялец
  • 778 сообщений
  • Откуда:QLD. Australia

Отправлено 20 Декабрь 2007 - 15:52

попробую, спасибо. Просто это был единственный вариант, который предоставили. На мыл сейчас получил ещё один вариант, почти такой же, как и у тебя 1-ый.
  • 0

#5 zedirtybastard

zedirtybastard
  • Пользователь
  • 499 сообщений

Отправлено 20 Декабрь 2007 - 15:57

попробую, спасибо. Просто это был единственный вариант, который предоставили. На мыл сейчас получил ещё один вариант, почти такой же, как и у тебя 1-ый.

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