![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 09:20
|
Аспирант
|
|
Регистрация: 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 есть?
Рыл интернет, пока ничего не нащол!
Киньте ссылку пожалуйста?
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:14
|
![Аватар для Erolast](https://javascript.ru/forum/image.php?u=30674&dateline=1380548540) |
Профессор
|
|
Регистрация: 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.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:17
|
![Аватар для Erolast](https://javascript.ru/forum/image.php?u=30674&dateline=1380548540) |
Профессор
|
|
Регистрация: 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]); //Выводим значение каждого элемента массива.
}
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:19
|
![Аватар для Boomerml](https://javascript.ru/forum/image.php?u=32014&dateline=1391068132) |
Аспирант
|
|
Регистрация: 04.12.2013
Сообщений: 31
|
|
Сам не силён, и если дезинформировал поправите меня! Если в ключе присутствует не цыфра, то это - Объекты.
Вам будет полезно http://javascript.ru/basic/array и http://javascript.ru/tutorial/object/intro
Работая с javascript'om больше стал пользоваться поиском через этот сайт. Очень весело получается. Вот только мыслить нужно чуть по другому. Если это касается массива(как вы пишете php foreach while for), то и в поиске нужно писать массив или array, а не искать через foreach...
Надеюсь помоГгггг...
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:22
|
|
|
Регистрация: 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
});
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:26
|
Профессор
|
|
Регистрация: 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]);
}
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:33
|
![Аватар для Erolast](https://javascript.ru/forum/image.php?u=30674&dateline=1380548540) |
Профессор
|
|
Регистрация: 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.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:35
|
![Аватар для Erolast](https://javascript.ru/forum/image.php?u=30674&dateline=1380548540) |
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
IE8 и остальных браузерах есть JSON.parse
|
А он в IE8 есть, разве? Ну тогда JSON.parse, да. Собственно, для него я и дал ссылку на гугол)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
06.04.2014, 10:41
|
![Аватар для Boomerml](https://javascript.ru/forum/image.php?u=32014&dateline=1391068132) |
Аспирант
|
|
Регистрация: 04.12.2013
Сообщений: 31
|
|
Erolast
Благодарю за пояснение, многое стало понятно
Видел статью, всё не доходят глаза, в основном делаю манипуляции с массивами не сложные, пока достаточно для меня, но время подыщу.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
07.04.2014, 16:23
|
Аспирант
|
|
Регистрация: 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?
|
|
|
|