Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2014, 09:20
Аспирант
Отправить личное сообщение для Alex_dark74 Посмотреть профиль Найти все сообщения от Alex_dark74
 
Регистрация: 10.04.2012
Сообщений: 72

foreach в js
Доброго времени суток!
В java я новичке и столкнулся с проблемой перебора массива.

через json_unicode приходит вот такой массив {"number":"number","size_x":"size_x","size_y":"siz e_y","num_1":"num_1"}, но как его перебрать и произвести над каждым элементом действия?

В php есть foreach, а в js? может быть в jquery есть?
Рыл интернет, пока ничего не нащол!
Киньте ссылку пожалуйста?
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2014, 10:14
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

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

Java != javascript, это во-первых. Java и javascript абсолютно разные языки, схожи лишь названием и ничем больше. Jquery - это никакой не самостоятельный язык, это всего-лишь набор готовых функций для javascript-программиста, ничуть не более.

JSON предназначен именно для javascript, это родной для javascript формат данных, запись данных в json аналогична записи данных в самом javascript. Нет абсолютно никакой необходимости городить свои циклы. Если ты передаешь его в веб-страницу через echo, просто делай так:
<?php 
$myarray = array("number"=>"number", "size_x"=>"size_x");
?>
<script>
var myvar = <?php echo(json_encode($myarray)) ?>;
console.log(myvar);
</script>

Если передаешь через ajax - прогоняй через eval.
var myvar = eval('{"number":"number","size_x":"size_x","size_y":"siz e_y","num_1":"num_1"}');

Если не уверен в источнике данных - гугли "javascript разбор json"

Последний раз редактировалось Erolast, 06.04.2014 в 11:14.
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2014, 10:17
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Ну а вообще аналог foreach в javascript - for in, и это тоже очень легко гуглится - https://www.google.com/search?q=javascript+аналог+foreach. Применяется вот таким образом:
var myarray = ["elem1", "elem2", "elem3"];  //Объявляем пронумерованный массив
for (var index in myarray)
{
   alert(myarray[index]);                   //Выводим значение каждого элемента массива.
}
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2014, 10:19
Аватар для Boomerml
Аспирант
Отправить личное сообщение для Boomerml Посмотреть профиль Найти все сообщения от Boomerml
 
Регистрация: 04.12.2013
Сообщений: 31

Сам не силён, и если дезинформировал поправите меня! Если в ключе присутствует не цыфра, то это - Объекты.

Вам будет полезно http://javascript.ru/basic/array и http://javascript.ru/tutorial/object/intro

Работая с javascript'om больше стал пользоваться поиском через этот сайт. Очень весело получается. Вот только мыслить нужно чуть по другому. Если это касается массива(как вы пишете php foreach while for), то и в поиске нужно писать массив или array, а не искать через foreach...

Надеюсь помоГгггг...
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2014, 10:22
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Erolast
Если передаешь через ajax - прогоняй через eval.
зачем eval, в IE8 и остальных браузерах есть JSON.parse

Сообщение от Alex_dark74
В php есть foreach, а в js?
for..in
или так:
var data = JSON.parse('{"number":"number","size_x":"size_x","size_y":"siz e_y","num_1":"num_1"}');

Object.keys(data).forEach(function (key) {

	data[key] //→ value

});
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2014, 10:26
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

var jsonStr = '{"number":"number","size_x":"size_x","size_y":"siz e_y","num_1":"num_1"}';
var objFromJsonStr = JSON.parse(jsonStr);
for (objKey in objFromJsonStr) {
  alert(objKey + ': ' + objFromJsonStr[objKey]);
}
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2014, 10:33
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Сам не силён, и если дезинформировал поправите меня! Если в ключе присутствует не цыфра, то это - Объекты.
Не совсем. В javascript могут быть и пронумерованные, и ассоциативные, и смешанные массивы, с объектами дела обстоят точно так же - ключом может выступать как число, как строка, как и то и другое. При этом массивы и объекты - разные сущности. Хоть они в большинстве случаев и взаимозаменяемы, рекомендуется все же использовать их по своему назначению - объекты для сложных конструкций со словесными индексами, массивы - для пронумерованных списков. JSON поступает именно так, да.

Вот простенькое сравнение поведения массивов и объектов.
Массивы:
var myarray = []; //Короткая форма объявления массива
myarray[1] = "firstvalue";
myarray["key"] = "secondvalue";
console.log(myarray);
console.log(myarray.toString());

Объекты:
var myobject= {}; //Короткая форма объявления объекта
myobject[1] = "firstvalue";
myobject["key"] = "secondvalue";
console.log(myobject);
console.log(myobject.toString());


Еще деталь - массивы, в отличие от объектов, имеют набор нативных функций вроде push и split. Эти функции наследуются от общего предка массивов, и через перебор по for in их не увидишь. Вот здесь подробности.

Последний раз редактировалось Erolast, 06.04.2014 в 19:45.
Ответить с цитированием
  #8 (permalink)  
Старый 06.04.2014, 10:35
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
IE8 и остальных браузерах есть JSON.parse
А он в IE8 есть, разве? Ну тогда JSON.parse, да. Собственно, для него я и дал ссылку на гугол)
Ответить с цитированием
  #9 (permalink)  
Старый 06.04.2014, 10:41
Аватар для Boomerml
Аспирант
Отправить личное сообщение для Boomerml Посмотреть профиль Найти все сообщения от Boomerml
 
Регистрация: 04.12.2013
Сообщений: 31

Erolast
Благодарю за пояснение, многое стало понятно

Видел статью, всё не доходят глаза, в основном делаю манипуляции с массивами не сложные, пока достаточно для меня, но время подыщу.
Ответить с цитированием
  #10 (permalink)  
Старый 07.04.2014, 16:23
Аспирант
Отправить личное сообщение для Alex_dark74 Посмотреть профиль Найти все сообщения от Alex_dark74
 
Регистрация: 10.04.2012
Сообщений: 72

Спасибо! Всем! Вот что получилось.
$('.no_nul').each(function(){
    if (this.value == ""){
      alert('Пусто');
    }
    else {
      alert(this.value);
    }
  });

Вот только как теперь запустить функцию?
пробую так:
$('.no_nul').each(function(){
    if (this.value == ""){
      this.css('border','1px solid red');
    }
    else {
      alert(this.value);
    }
  });

но ругается в консоли
this.css is not a function
Понятно что это не функция
Пробую так:
$('.no_nul').each(function(){
    if (this.value == ""){
      function(){
        this.css('border','1px solid red');
      }
    }
    else {
      alert(this.value);
    }
  });

ругается:
function statement requires a name

Как заставить поменять border?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
Вывыод контента через JS inet_boy Элементы интерфейса 0 18.11.2013 03:00
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05
Raphael JS set и forEach a9lex3 Библиотеки/Тулкиты/Фреймворки 0 14.10.2011 13:05