Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   foreach в js (https://javascript.ru/forum/misc/46332-foreach-v-js.html)

Alex_dark74 06.04.2014 09:20

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

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

В php есть foreach, а в js? может быть в jquery есть?
Рыл интернет, пока ничего не нащол!
Киньте ссылку пожалуйста?

Erolast 06.04.2014 10:14

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

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 10:17

Ну а вообще аналог 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]);                   //Выводим значение каждого элемента массива.
}

Boomerml 06.04.2014 10:19

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

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

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

Надеюсь помоГгггг...

Octane 06.04.2014 10:22

Цитата:

Сообщение от 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

});

jsnb 06.04.2014 10:26

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]);
}

Erolast 06.04.2014 10:33

Цитата:

Сам не силён, и если дезинформировал поправите меня! Если в ключе присутствует не цыфра, то это - Объекты.
Не совсем. В 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 10:35

Цитата:

IE8 и остальных браузерах есть JSON.parse
А он в IE8 есть, разве? Ну тогда JSON.parse, да. Собственно, для него я и дал ссылку на гугол)

Boomerml 06.04.2014 10:41

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

Видел статью, всё не доходят глаза, в основном делаю манипуляции с массивами не сложные, пока достаточно для меня, но время подыщу.

Alex_dark74 07.04.2014 16:23

Спасибо! Всем! Вот что получилось.
$('.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?


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