Работа с массивами
Как работать с массивами в js?
Необходимо составить два массива между которыми будет ключ к другому(в значения). Перебрать один из массивов в цикле выводя второй параллельно по ключу, как? |
сделай объект, так разве не легче?
var o = { a: 'значение ключа a', b: 'значение ключа b' } |
Не уверен что понял, но возможно вот это:
var a=[0,1,2,3] var b=[10,20,30,40] for(var i = 0; i<a.length; i++) console.log(a[i], b[a[i]]) это по значениям. А пo ключам вот так: var a=[0,1,2,3] var b=[10,20,30,40] for(var i = 0; i<a.length; i++) console.log(a[i], b[i]) |
Есть два park и marshrut массива при нажатии кнопки Выехал по данным введённым в поле busn объект записывается в массив marsrut и удаляется из массива park.Когда записан один объект,то всё работает нормально.А когда добавляю второй объект,то в массив marshrut добавляется объект находящийся в массиве park первым.Как сделать,чтобы в массив marshrut записывался объект свойство которого введено в поле busn?
Код скрипта 2.js: var park = new Array(); var marshrut = new Array(); function input(){ var busn = document.f.busn.value; var name = document.f.fio.value; var marsh = document.f.marsh.value; var bus = { busn:busn, name:name, marsh:marsh }; var bus1 = Object.create(bus); var Element=park.unshift(bus.busn+'/'+bus.name+'/'+'№'+bus.marsh); } function output(){ document.f.displey1.value=park; document.f.displey2.value=marshrut; } function inpdel1(){ var busn=document.f.busn.value; for(var i=0;i<park.length;i++){ if(busn=park){ marshrut.unshift(park[i]); park.shift(park[i]); } } } function inpdel2(){ var busn=document.f.busn.value; for(var i=0;i<marshrut.length;i++){ if(busn=marshrut){ park.unshift(marshrut[i]); marshrut.shift(marshrut[i]); } } } Код страницы: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> Your Title Here </title> <script type="text/javascript" src="2.js"></script> </head> <body> <form name="f"> <table width="100"> <tr> <td>В парке</td> <td>На маршруте</td> </tr> <tr> <td><textarea name="displey1" rows="5" cols="20"></textarea></td> <td><textarea name="displey2" rows="5" cols="20"></textarea></td> </tr> </table> <br> Введите данные<br> фио<br> <input type="text" name="fio"><br> номер автобуса<br> <input type="text" name="busn"><br> номер маршрута<br> <input type="text" name="marsh"><br> <input type="button" value="Ввод" onClick="input();"><input type="button" value="Выехал" onClick="inpdel1();"> <input type="button" value="Въехал" onClick="inpdel2();"><input type="button" value="Вывод" onClick="output();"> <br><input type="reset" value="Сброс"><input type="button" value="Поиск" onClick="();"> </form> </body> </html> |
Цитата:
|
if(busn=park){
if(busn=marshrut){ Это поиск значения переменной busn в массивах park и marshrut. |
Цитата:
https://learn.javascript.ru/ |
В этом учебнике я не нашел поиска объекта по его свойствам в массиве.
|
Цитата:
|
А так,объект с свойствами создаётся и записывается в массив.И таких объектов может быть n-ное колличество.И требуется найти нужный объект по свойству.
|
массив поиск по свойству
vovang,
function searchProperty(array, property, value) { for (var i = 0; i < array.length; i++) { var item = array[i]; if (property in item && item[property] == value) { return i; } } return -1; } var park = [{busn:111, name:222, marsh:123}, {busn:222, name:777, marsh:333}]; var marshrut = []; var index = searchProperty(park, "name", "777"); alert(index); var obj; if (index !== -1) { obj = park.splice(index, 1)[0]; } if (obj) { marshrut.push(obj); } alert(JSON.stringify(park)); alert(JSON.stringify(marshrut)); |
arr.find(el=>Object.keys(el).some(el=>el=='нужное свойство'))вернет первый найденный объект с нужным свойством arr - это ваш массив с объектами |
Цитата:
|
Цитата:
var arr = [{a:1},{b:2},{c:3}]; console.log(arr.find(el=>Object.keys(el).some(el=>el=='b'))); |
j0hnik,
:) Цитата:
|
рони, пффф... ваш анекдот
|
рони,
а что ваша программка делает? явно что-то не по ТЗ :D |
Цитата:
ваш совет рабочий, но бесполезный, а пост №11 это то что нужно. |
var arr = [{busn:111, name:222, marsh:123}, {busn:222, name:777, marsh:333}]; var func = (a,b) => arr.find(el=> Object.keys(el).some(el=>el==a)&& Object.values(el).some(el=>el==b)); console.log(func('name', 777)); а теперь? Но рабочий же, а вы сомневались, ай ай ай .. |
Цитата:
[{busn:111, name:222, marsh:123}, {busn:222, name:777, marsh:333}]; как это Цитата:
|
рони переделал
|
Цитата:
|
var park = [{busn:111, name:222, marsh:123}, {busn:222, name:777, marsh:333}]; Рони.Дело в том,что индекс элемента массива заранее не известен,т.к. данные вводятся через форму и на их основе создается объект,который потом будет записан в массив park.И найти нужный объект нужно исключительно по свойству busn.Это одно из условий работы программы.Поэтому массивы park и marshrut создаются отдельно через new Array.А функция input создаёт сам объект и записывает его в массив. |
vovang,
так и в примере неизвестен индекс, и в примере находится Цитата:
Цитата:
Цитата:
|
Вот функция добавления из массива park в массив marshrut
function inpdel1(){ var busn=document.f.busn.value;//доступ к полю ввода for(var i;i<park.length;i++){ if(условие?){ marshrut.unshift(park[i]);//добавление в массив park.shift(park[i]);//удаление из массива } } } Как записать условие,чтобы найти объект по свойству busn в массиве park?Без перезаписи всего скрипта. |
Цитата:
|
vovang,
function searchProperty(array, property, value) { for (var i = 0; i < array.length; i++) { var item = array[i]; if (property in item && item[property] == value) { return i; } } return -1; } function inpdel1(){ var busn = document.f.busn.value;//доступ к полю ввода var index = searchProperty(park, "busn", busn); var obj; if (index !== -1) { obj = park.splice(index, 1)[0]; } if (obj) { marshrut.push(obj); } } |
Рони.А каким образом будет запускаться функция searchProperty?
|
Цитата:
|
Т.е. вы хотите сказать,что после запуска функции inpdel1 когда выполнение кода дойдёт до строки 12 поста №27,то запустится searchProperty?
|
vovang,
да |
Так почему не работает?
|
Цитата:
|
Функция searchProperty
|
vovang,
где ваш код, который не работает? |
Может я что-то не понимаю.Вот мой код скрипта изначальный
var park = new Array(); var marshrut = new Array(); function input(){ var busn = document.f.busn.value; var name = document.f.fio.value; var marsh = document.f.marsh.value; var bus = { busn:busn, name:name, marsh:marsh }; var bus1 = Object.create(bus); var Element=park.unshift(bus.busn+'/'+bus.name+'/'+'№'+bus.marsh); } function output(){ document.f.displey1.value=park; document.f.displey2.value=marshrut; } function inpdel1(){ var busn=document.f.busn.value; /*for(var i=0;i<park.length;i++){ if(busn=park){ marshrut.unshift(park[i]); park.shift(park[i]); } }*/ } function inpdel2(){ var busn=document.f.busn.value; for(var i=0;i<marshrut.length;i++){ if(busn=marshrut){ park.unshift(marshrut[i]); marshrut.shift(marshrut[i]); } } } Вот ваш код function searchProperty(array, property, value) { for (var i = 0; i < array.length; i++) { var item = array[i]; if (property in item && item[property] == value) { return i; } } return -1; } function inpdel1(){ var busn = document.f.busn.value;//доступ к полю ввода var index = searchProperty(park, "busn", busn); var obj; if (index !== -1) { obj = park.splice(index, 1)[0]; } if (obj) { marshrut.push(obj); } } Вставьте ваш фрагмент кода в полный скрипт. |
Цитата:
|
В функции inpdel1 этот бред
if(busn=marshrut){отсуствует.Функция inpdel1 записывает в массив marshrut объект по свойству busn и удаляет этот же объект из массива park.На функцию inpdel2 можете не обращать внимания,она выполняет другие действия.Вставьте ваш фрагмент кода в общий скрипт.Чтобы было понятно как он распологается. |
vovang,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script> var park = new Array; var marshrut = new Array; function createBus() { var busn = document.f.busn.value; var name = document.f.fio.value; var marsh = document.f.marsh.value; var bus = { busn: busn, name: name, marsh: marsh }; document.f.reset(); return bus; } function showBusFromArray(array, elem) { var str = ""; for (var i = 0; i < array.length; i++) { var item = array[i]; str += JSON.stringify(item) + "\n"; } elem.value = str; } function addBus() { var bus = createBus(); park.push(bus); var elem = document.f.displey1; showBusFromArray(park, elem); elem = document.f.displey2; showBusFromArray(marshrut, elem); } function searchProperty(array, property, value) { for (var i = 0; i < array.length; i++) { var item = array[i]; if (property in item && item[property] == value) { return i; } } return -1; } function fromParkToMarshrut() { var busn = document.f.busn.value; var index = searchProperty(park, "busn", busn); var obj; if (index !== -1) { obj = park.splice(index, 1)[0]; } if (obj) { marshrut.push(obj); } document.f.reset(); var elem = document.f.displey1; showBusFromArray(park, elem); elem = document.f.displey2; showBusFromArray(marshrut, elem); }; </script> </head> <body> <form name="f"> <table width="100"> <tr> <td>В парке</td> <td>На маршруте</td> </tr> <tr> <td><textarea name="displey1" rows="5" cols="20"></textarea></td> <td><textarea name="displey2" rows="5" cols="20"></textarea></td> </tr> </table> <br> Введите данные<br> фио<br> <input type="text" name="fio"><br> номер автобуса<br> <input type="text" name="busn"><br> номер маршрута<br> <input type="text" name="marsh"><br> <input type="button" value="Добавить автобус" onClick="addBus()"> <input type="button" value="Ввести номер автобуса, отправить на маршрут" onClick="fromParkToMarshrut()"> </form> </body> </html> |
И снова вы изменили весь скрипт.Складывается впечатление,только в написаном вами скрипте работает ваш фрагмент кода.Потому как в моём скрипте
var park = new Array(); var marshrut = new Array(); function input(){ var busn = document.f.busn.value; var name = document.f.fio.value; var marsh = document.f.marsh.value; var bus = { busn:busn, name:name, marsh:marsh }; var bus1 = Object.create(bus); var Element=park.unshift(bus.busn+'/'+bus.name+'/'+'№'+bus.marsh); } function output(){ document.f.displey1.value=park; document.f.displey2.value=marshrut; } function searchProperty(array, property, value) { for (var i = 0; i < array.length; i++) { var item = array[i]; if (property in item && item[property] == value) { return i; } } return -1; } function inpdel1(){ var busn=document.f.busn.value; var index = searchProperty(park, "busn", busn); var obj; if (index !== -1) { obj = park.splice(index, 1)[0]; } if (obj) { marshrut.push(obj); } },код function searchProperty(array, property, value) { for (var i = 0; i < array.length; i++) { var item = array[i]; if (property in item && item[property] == value) { return i; } } return -1; } function inpdel1(){ var busn = document.f.busn.value;//доступ к полю ввода var index = searchProperty(park, "busn", busn); var obj; if (index !== -1) { obj = park.splice(index, 1)[0]; } if (obj) { marshrut.push(obj); } }неработает. |
Часовой пояс GMT +3, время: 12:37. |