Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Массив обьектов js сравнение

Помогите пожалуйста,надо переделать код так чтобы не было ошибки в операторе if( как сравнить массив обьектов с координатой x)
var stone = []
  stone = {103,159,146,101}
 var x = 146;
 if( stone == 146){console.log("146");}


Ладно обьясню подробнее, надо чтобы все значения в массиве обьектов stone перебирались(перепроверял� �сь) и если одно из значений равно иксу - 146 то выводиться сообщение в консоль
Ответ: ааа я понял, ну думаю вам будет легче понять если будет так:
var stone = [{}]
Вопрос: фильтр массив обьектов

Добрый день уважаемые форумчане.
помогите разобраться в одном вопросе. у меня есть два массива объектов, к примеру:
let obj1 = [
 {id:1, name="вася"},
 {id:2, name="петя"},
 {id:3, name="маша"},
 {id:4, name="даша"}
]
let obj2 = [
 {id:1},
 {id:2}
]


и мне нужно вывести объекты где id obj2 совпадает с obj1

запутался с фильтрами и сортировками, в итоге у меня получается достичь цели, но код выглядет громостким и "грязным"
Ответ: спасибо вам большое
Вопрос: Подсчет и вывод количества сравнений в методе быстрой сортировки массива

Есть скрипт выполняющий сортировку массива методом быстрой сортировки. Не могу разобраться, как реализовать
подсчет и вывод количества сравнений после сортировки.... Помогите пожалуйста!

<!DOCTYPE html> 
<html><head>
<title>Метод "Быстрая сортировка"</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<style>

body  { margin-top:0; }

h2 { padding:0; margin-bottom:0 }
ul  { list-style-type: none;padding:12px 0px; }
ul  li { border:1px solid gray; display:inline-block; width:30px; text-align:center; margin-left:-1px; position:relative} 
 
.info { margin-top: 12px; margin-right:8px;padding-right:10px; border:1px solid gray; 
        float:left; background-color: black; color:white; min-width:72px; text-align:center;}
.pivot { color:red; opacity:0.8}
label {  width:100px; margin-top:8px;}

button { margin-top:26px; margin-left:16px; padding:2px 8px; height:28px;}
 
#arr0 , #arr1 { position:absolute; top:-1.5em; left:10px;  padding:0; margin:0;  } 

#arr0 { color: blue; }
#arr1 { color: red; } 

.finalarray { padding:6px 4px; border:1px solid red; margin:0; display:inline-block; }
   

</style>

</head>
<body>
<h2>Метод "Быстрая сортировка"</h2>

<div>
<label>Одномерный массив длинной N = 7</label>
</div> 
<div>
<label>Массив [4,9,7,6,2,3,8]</label>
</div>
<div>
<button onclick="ExecuteQS()">СОРТИРОВАТЬ</button>
</div> 

<div  id="OutDiv" > 
</div>

<script>


var A;
var paramStack;

var prevleft,prevright;
   
var arr0 = "<span id='arr0' >&darr;</span>";
var arr1 = "<span id='arr1' >&darr;</span>";

var Speed;

var newRow;
var gelem1, gelem2;
 
var lo,  hi;
var left,right; 
var Timer1= null;
var dispLeft,dispRight;
 
var gLeftIndx, gRightIndx;
var pivotLoc;
var cmp;

function compare()
{
  ++cmp;
  return cmp;
}

function ExecuteQS() 
{ 
  if (Timer1) clearInterval(Timer1);
  Timer1 = null; 

  OutDiv.innerHTML = "";
  Speed = 10;
  var n = 7;
  cmp = 0;
  A = new Array();
  A = [0,4,9,7,6,2,3,8];

  paramStack=[];
  var B = A.slice();
  Quicksort(A,1,A.length-1,compare);

  A = B.slice();
  ProcessStack(); 
  
}

function Quicksort( A, lo, hi) 
{
  if (lo < hi) 
  {  
    var mid = Partition(A,lo,hi);
    Quicksort(A,lo,mid-1);
    Quicksort(A,mid+1,hi);
  } 
} 

function Partition( A, lo, hi)
{

  paramStack.push([-lo,hi]);
  var pivot = A[lo];   
  var left = lo+1; 
  var right = hi;

  while (left <= right)
  {  
    while ((left <= right) && (A[left] <= pivot)) 
    {
      left++; ++cmp; 
    }
    while ((left <= right) && (A[right] > pivot)) 
    {
      right--;
    }	
    
    if (left < right)
    {  
      paramStack.push([left,right]);
      var t = A[left]; 
      A[left] = A[right]; 
      A[right] = t; 
      left++; 
      right--; 
    }

  }

  A[lo] = A[right]; 
  A[right] = pivot;
  paramStack.push([lo,right]); 

  return right;
}


function ProcessStack()
{  
  var elem = document.getElementById("arr0");
  if (elem) elem.parentNode.removeChild(elem); 
  elem = document.getElementById("arr1");
  if (elem) elem.parentNode.removeChild(elem); 

  if (paramStack.length==0)  
  { 
    PrintArray(A,-1,0); return; 
  }

  gelem1 = null; 
  gelem2 = null;
  newRow = false;
  var param = paramStack.shift(); 

  left = param[0]; 
  right = param[1]; 

  if (left < 0)  
  {  
    newRow =true;
    lo = -left;  
    hi = right; 
   
    prevleft = lo; 
    prevright = hi;

    param = paramStack.shift();  
   
    left = param[0]; 
    right = param[1]; 
  } 
     
  dispLeft = left-prevleft; 
  dispRight = prevright-right; 

  if (left==lo) dispLeft = right - prevleft;

  PrintArray(A, prevleft, prevright);

  prevright = right; 
  prevleft = left;

  var t = A[left]; 
  A[left] = A[right]; 
  A[right] = t; 

  if (!Timer1) Timer1 = setInterval(AnimateArrow,Speed); 
} 


function PrintArray(A, prevleft, prevright)
{  
  var finish = (prevleft==-1);
  if (finish) 
  { 
    lo=0; 
    hi=0; 
    newRow=true;
  }

  var x =  "";

  for(var i= 1; i < A.length ; i++)
  {  
    var st = ""; 
    if ( (i>=lo)  &&  (i <=hi)) st = "style='background-color:lightgray'";

    var ext ="";

    if (i==prevleft ) 
    {  
      ext = arr0; gLeftIndx = i; st = "style='background-color:white'";   
    }
  
    if (i==prevright )
    { 
      ext = arr1; gRightIndx = i; st  = "style='background-color:white'";  
    }

    if (i==lo) st += " class ='pivot'"; 
    x += "<li " + st + ">" + A[i] + ext + "</li>"; 
  } 

  var Info = ""; 

  OutDiv.innerHTML += Info + "<ul>"  + x + "</ul>"; 

  if (lo==left) pivotLoc = right;

  if (finish)
  {   
    elems = document.getElementsByTagName("ul");
    elem = elems[elems.length-1];
    elem.className = "finalarray";
    
    console.log(cmp);

  } 
   
}
  
 
function AnimateArrow()
{ 
  if (( dispLeft < -1) && ( dispRight < -1))  
  {  
    clearInterval(Timer1); Timer1 = null; 
    ProcessStack(); 
    return; 
  }

  var elems = document.getElementsByTagName("ul");
  var lastList = elems[elems.length-1];

  if (( dispLeft == -1) && ( dispRight == -1))
  {   
    lastList.getElementsByTagName("li")[left-1].style.backgroundColor="yellow"; 
    dispLeft = -2; 
    dispRight = -2;
    return;
  }

  arr_elem = document.getElementById("arr0");
  styleInfo = window.getComputedStyle(arr_elem);
  pos = parseInt(styleInfo.left); 

  pos = pos + 31;
  if ( dispLeft > 0) 
  {  
    dispLeft--;  
    if (gelem1) gelem1.style.backgroundColor="lightgray";  
      else lastList.getElementsByTagName("li")[gLeftIndx-1].style.backgroundColor="lightgray";  
    gelem1 = lastList.getElementsByTagName("li")[gLeftIndx];
    if (gLeftIndx  < right ) 
      if (gelem1.style.backgroundColor!="yellow") gelem1.style.backgroundColor="white"; 
    arr_elem.style.left = pos  + "px";  
    gLeftIndx++; 
  }
  else  if (dispLeft==0) 
  {   
    lastList.getElementsByTagName("li")[gLeftIndx-1].style.backgroundColor="yellow"; 
    dispLeft =-1;
  } 

  arr_elem  = document.getElementById("arr1");
  styleInfo = window.getComputedStyle(arr_elem);
  pos = parseInt(styleInfo.left);
  pos = pos - 31;

  if (dispRight > 0)
  {   
    dispRight--; 
      
    if (gelem2)  gelem2.style.backgroundColor="lightgray";  
     else lastList.getElementsByTagName("li")[gRightIndx-1].style.backgroundColor="lightgray";  

    gelem2 = lastList.getElementsByTagName("li")[right+dispRight-1];

    if (gelem2.style.backgroundColor!="yellow")  gelem2.style.backgroundColor="white";

    if ((right - gLeftIndx <= 2) && (dispRight<=1))  pos +=2; // to avoid blue/red arrows overlapping
    arr_elem.style.left = pos  + "px";    
  } 
  else if  (dispRight==0) 
  {   
    lastList.getElementsByTagName("li")[right-1].style.backgroundColor="yellow";   
    dispRight =-1;
       
  }   
    
}

</script>
</body>
</html>
Ответ:
Сообщение от Rise
kogenate, немного оптимизировал код вроде работает:
alert([4,9,7,6,2,3,8].sort())
Оптимизация, увы, не выполняет требование поставленной задачи, необходимо продемонстрировать работу данной сортировки + подсчитать количество сравнений.
На Си++ все элементарно реализуется: кол-во сравнений равно 13, а тут не могу разобраться, выходит всего 7мь сравнений, счетчик ставлю в те же циклы, что и на Си++.
Вопрос: Сортировка обьекта

Всем привет. Помогите отсортировать такой обьект.

var items = { 
vasya: {age: 35, count: 2},
oleg: {age: 21, count:5},
andrej: {age: 26, count: 8}
}
;


Нужно отсортировать по полю age.
Ответ:
balambasik, но только сначала преобразуй свой объект в массив :) Либо можно создать другой объект. Но лучше все-таки с массивом работать.

И что вообще за задача такая, зачем сортировать данные в объекте?
Вопрос: Сравнение двух массивов и вывод на экран их одинаковых элементов

Здравствуйте. Только начал изучать JavaScript. Хочу разобраться с вот такой задачкой: Заполнить два массива случайными числами; сравнить элементы массива; одинаковые элементы вывести на экран.
До чего дошел я:
Код Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script type="text/javascript">
    document.write("the first massiv:");
    var arr = []; //объявление массива
for (var i = 0; i < 10; ++i){
arr[i] = Math.round(Math.random()*100);  //заполнение случайными числами
document.write(arr[i]); //вывод массива на экран
}
document.write("the second massiv:")
var massiv = [];
for(var i = 0; i < 10; ++i){
massiv[i] = Math.round(Math.random()*100);
document.write(massiv[i]);
}
var b = []; // создаю 3-й массив, куда буду вносить одинаковые элементы 2-х массивов
for(var i = 0; i < 10; ++i){
    for(var j = 0; j < 10; ++j){ // создал 2 цикла для сравнения 2-х массивов.      
    
Вот и все до чего я додумался. Подскажите, пожалуйста, как правильно сравнить массивы и записать одинаковые элементы в 3-й массив.
Просьба от меня, по скольку я только начал учить этот язык, пожалуйста, комментируйте ваши варианты. И еще, как делать перенос строки в JS?
За ранее спасибо.
Ответ: А как можно сделать чтобы в массив добавлялся только один из 2-вох элементов?
Вопрос: Не могу удалить обьект из обьекта el.files



var obj={

	files:{
  
  	0:{name:'go'}
  
  
  
  }


}

alert(obj.files[0].name);

delete obj.files[0];

alert(obj.files[0]);


Не могу понять почему код выше является рабочим, тоесть обьект удаляется а если его применить к обьекту files, элемента input type='file' , то ничего не выходит(см.ссылку на jsfiddle)(((
Ответ:
Сообщение от DynkanMaclaud
а если его применить к обьекту files, элемента input type='file', то ничего не выходит
Потому, что это контролирует браузер, изменить нельзя, безопасность.
Вопрос: Проверка на соответствие ключа в многомерном массиве

Есть код:

arr - многомерный массив следующего вида : [ [], [], [] ];
В каждом подмассиве содержится ключ-значение, напрм. [ ['title':'hello', id: 3533], ['title' : 'data', 'id':5454], []... ];

Также есть массив обычный массив keys = ['title', 'id'], который должен проверять соответствие ключей в каждом массиве многомерного дружка.

var i=1, y=0, result; txt='';
			
var arr = ...
var keys = ..	
			
	for(i;i<arr.length;i++) {
					
			var cell = arr[i];
					
			     for(y;y<keys.length;y++) {
							
					alert(cell[keys[y]])
							
						}


Получилось придумать что-то такое, но замысел думаю понятен. В данном коде массив keys, сравнивает ключи только первого подмассива в массиве arr.
Ответ:
Сообщение от hoax
Нет там именно многомерный массив.
видимо вы сами не в курсе какая структура у вашего обьекта.
Вопрос: Элементы массива

Доброе утро.
Не могу разобраться как сделать следующее. Необходимо высчитать среднее арифметическое значение элементов массива, кроме первого и последнего столбцов, где значения полей столбца Time и Date равны, то есть у Time для сравнения значение берется исключая секунды, например 14:22. Логика такая:
найти строки с одинаковыми значениями по столбцам Time (брать формат чч:мм, секунды в сравнении не учитывать) и Date, далее высчитать среднее арифметическое значений для всех столбцов кроме первого и последнего и записать получившуюся строку в новый массив.

Функция, высчитывающая среднее значение:
Код Javascript
1
2
3
4
5
6
7
8
9
function sa() {
    var len = arguments.length;
    if (len == 0) return "Нет значений";
    var sum = 0;
    for (var i = 0; i < len; i++) {
        sum += +arguments[i];
    }
    return sum/len;
}
Код Code
1
2
3
4
5
6
7
8
9
10
11
12
13
Time          Art1    Ppt2          Date
14:22:04      1        4        11/24/2014
14:22:14      3        3        11/24/2014
14:22:24      5        5        11/24/2014
14:22:34      0        7        11/24/2014
14:22:44      3        1        11/24/2014
14:22:54      9        0        11/24/2014
14:23:04      12      3         11/24/2014
14:23:14      1        5         11/24/2014
14:23:24      2        6         11/24/2014
14:23:34      4        8         11/24/2014
14:23:44      6        2         11/24/2014
14:23:54      11       0        11/24/2014
В итоге должен получиться новый массив такого вида:
Код Code
1
2
3
Time         Art1    Ppt2         Date
14:22           ?       ?         11/24/2014
14:23:54       ?       ?         11/24/2014
Ответ: Мое кривое решение, вместо среднего значения получаю максимальное:
Код Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
                        var massMax = []; // массив максимальных значений
                        var cache = []; // сумма элементов
                        var num = 0, num2 = 1;
                        for (var i=1; i < results.data.length; i++) { // i - строка
                            if (i==1) {
                                cache[0] = results.data[i][1];
                                continue;
                            }
                            if (results.data[i][0] == results.data[i-1][0]) {
                                cache [num2] = results.data[i][1];
                                num2++;
                            } else {
                                massMax[num] = Math.max.apply(null, cache); 
                                num++;
                                var cache = [];
                                cache [0] = results.data[i][1];
                                num2 = 1;
                                }
                        }
Вопрос: Сравнение строки с массивом

Здравствуйте
Есть JS, при выполнении которого символы введенные в инпут сравниваются с массивом и результат выводится в ячейку таблицы.
Проблема в следующем - если в массиве сравнивается один символ, то все хорошо. Если в массиве более одного символа - то сравнения нет.
Пожалуйста, помогите
<input id="eurocode" value="" type="text">
<input type="button" value="go" onclick="send()">
<br><br>
<table id="tab_decode" class="hid" border="1">
<tr>
 <td>Марка и модель а/м</td>
 <td id="marka_decode"></td>
</tr>
</table>

<script type='text/javascript'>
function send(){
var eurocode = $('#eurocode').val();
var decode1 = new Array();
    decode1['Q'] = 'Текст 1'; // один символ    
    decode1['WR'] = 'Текст 2';  // больше одного символа   
    decode1['YUJ'] = 'Текст 3'; // больше одного символа   

var result = '';
	for(i=0;i<eurocode.length;i++){ 
		if(decode1[eurocode[i]]){ 
			result += decode1[eurocode[i]]; 
			$('#marka_decode').text(result);
			} else {
			$('#marka_decode').text('не определено');
		}
	}
}
</script>
Ответ: rodiony4, не с циклом, а с массивом. на жабе скрипучей так нельзя делать decode1['Q'] = 'Текст 1'; если decode1=[];
Вопрос: Запихнуть массив в атрибут

Подскажите какое-нибудь простое и изящное решение (jQuery included):
Надо в атрибут data-* засунуть массив (это будут индексы другого массива).
Но сделать это надо так: циклом дёргем элемент, проверяем есть ли у него этот атрибут, если нет - то создаем и записываем туда элемент массива, если есть - дописываем следующий элемент.
var eventArr = [object, object, .., object];
var eventArrId = [];
jQuery.each(eventArr, function() {
var id = this.index;
...
$(item).data("ArrId", "???вот тут непонятно");
};
Ответ: Nanto,
так у вас есть data() из неё и берите данные -- а атрибуты хранят только строки а не массивы или иные обьекты -- и для работы с ними есть функция attr()