Работа с массивами
Как работать с массивами в 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, время: 19:11. |