Сортировка JS объекта

358
02 февраля 2017, 03:07

Доброго времени суток, мои познания в JS весьма скромны, и я уже бьюсь несколько дней над вроде простой задачей. Есть объект:

var items={};
items[1]={
    param_1:"10",
    param_2:"521А2",
    param_3:"A",
    anydata:"bla-bal"
}    
items[2]={
    param_1:"15",
    param_2:"521А1",
    param_3:"B",
    anydata:"bla-bal"
}
items[50]={
    param_1:"10",
    param_2:"521А3",
    param_3:"C",
    anydata:"bla-bal"
}

Нужно не сколько отсортировать, а исключить ненужные элементы объекта во время перебора, сейчас я перебираю данный объект с помощью цикла for и в процессе сравниваю параметры: PARAM_1, PARAM_2, PARAM_3 и получается очень много IF ELSE

if(items[i].param_1 == param_1){ console.log(items[i]); }
if(items[i].param_2 == param_2){ console.log(items[i]); }
if(items[i].param_3 == param_1){ console.log(items[i]); }
if(items[i].param_1 == param_1 && items[i].param_2 == param_2){ console.log(items[i]); }
if(items[i].param_2 == param_2 && items[i].param_3 == param_3){ console.log(items[i]); }
if(items[i].param_3 == param_3 && items[i].param_1 == param_1){ console.log(items[i]); }

Ну и так далее... Собственно а нужна то по сути простая функция которая принимает 3 параметра, и возвращает отсортированный объект где совпадают между собой эти параметры если они заданы, то есть некоторые параметры могут отсутствовать Например:

get_table({param_1:10,param_2:'521А2',param_3:'A',});
get_table({param_2:'521А1',param_2:'B',});
function get_table(data){
    for (i in items) {
        //Магический IF =)
        if(все параметры сходятся у элемента items[i]){
            consle.log(items[i]);
        }
    }
}
Answer 1

Как-то так?

var items={}; 
items[1]={ 
    param_1:"10", 
    param_2:"521А2", 
    param_3:"A", 
    anydata:"bla-bal" 
};     
items[2]={ 
    param_1:"15", 
    param_2:"521А1", 
    param_3:"B", 
    anydata:"bla-bal" 
}; 
items[50]={ 
    param_1:"10", 
    param_2:"521А3", 
    param_3:"C", 
    anydata:"bla-bal" 
}; 
 
function filter(items, test) { 
  var res = []; 
  for (item in items) { 
    var match = true; 
    for (field in test) { 
      if (items[item][field] !== test[field]) { 
        match = false; 
        break; 
      } 
    } 
    if (match) 
      res.push(items[item]); 
  } 
  return res; 
} 
 
console.log(filter(items, {param_3: "B"})); 
console.log(filter(items, {param_1: "10", param_3: "C"})); 
     
          

Answer 2

var items={}; 
items[1]={ 
    param_1:"10", 
    param_2:"521А2", 
    param_3:"A", 
    anydata:"bla-bal" 
};     
items[2]={ 
    param_1:"15", 
    param_2:"521А1", 
    param_3:"B", 
    anydata:"bla-bal" 
}; 
items[50]={ 
    param_1:"10", 
    param_2:"521А3", 
    param_3:"C", 
    anydata:"bla-bal" 
}; 
 
function filter(items, test) { 
  var res = []; 
  for (item in items) { 
    var match = true; 
    for (field in test) { 
      if (items[item][field] !== test[field]) { 
        match = false; 
        break; 
      } 
    } 
    if (match) 
      res.push(items[item]); 
  } 
  return res; 
} 
 
console.log(filter(items, {param_3: "B"})); 
console.log(filter(items, {param_1: "10", param_3: "C"})); 
     
          

READ ALSO
Конфликт прелоадера с API Google maps

Конфликт прелоадера с API Google maps

Доброго времени суток!

366
Удалить елемент в jQuery

Удалить елемент в jQuery

Как можно удалить весь item при нажатии на кнопку "Удалить"? Этих итемов может быть неограниченное количество

320
Не работают генераторы

Не работают генераторы

Не работают генераторы, выкидывает ошибку

418
Куда нужно загрузить код google analytics on_sent_ok?

Куда нужно загрузить код google analytics on_sent_ok?

Всем привет, подскажите пожалуйста как вставить атрибут для форм Куда нужно вставить, пробовал написать в input submit, выводит ошибкуПробовал...

335