Как получить самое большое и маленькое число одного типа в объекта?

115
13 августа 2019, 00:30
var object = { 
    "N102 - Number 102": {name: "1N02 - Number 102"},
    "B152 - Bar 152": {name: "B152 - Bar 152"},
    "N104 - Number 104": {name: "N104 - Number 104"},
    "A126 - A 126": {name: "A126 - A 126"},
    "N100 - Number 100": {name: "N100 - Number 100"},
    "A156 - A 156": {name: "A156 - A 156"},
    "N155 - Number 155": {name: "N155 - Number 155"},
    "C110 - C 110": {name: "C110 - C 110"}
};

Этим способом я получая самое большое и самое маленькое число из всего объекта:

var a = Object.keys(object).map(x => +x.match(/\d+/));
console.log(Math.min(...a));
console.log(Math.max(...a));

Помогите получить только самое маленькое и большое число из ключей, содержащих букву N и слово Number. В данном случаи это должно быть 100 и 104.

Answer 1

Для поиска только на определенном наборе из сходных данных, их нужно предварительно отфильтровать.

Например с помощью метода filter

var a = Object.keys(object)
              .filter( x => x.indexOf('N') > -1 ) // выбираем элементы начинающиеся на N
              .map(x => +x.match(/\d+/));
console.log(Math.min(...a));
console.log(Math.max(...a));

Для поиска min и max элементов за один проход можно воспользоваться обычным циклом for, либо reduce

Например так:

var object = { 
  "N102 - Number 102": { 
    name: "1N02 - Number 102" 
  }, 
  "B152 - Bar 152": { 
    name: "B152 - Bar 152" 
  }, 
  "N104 - Number 104": { 
    name: "N104 - Number 104" 
  }, 
  "A126 - A 126": { 
    name: "A126 - A 126" 
  }, 
  "N100 - Number 100": { 
    name: "N100 - Number 100" 
  }, 
  "A156 - A 156": { 
    name: "A156 - A 156" 
  }, 
  "N155 - Number 155": { 
    name: "N155 - Number 155" 
  }, 
  "C110 - C 110": { 
    name: "C110 - C 110" 
  } 
}; 
 
var a = Object.keys(object) 
  .reduce((acc, cur) => { 
    var match = cur.match(/^N(\d+)/); 
    if (!match) return acc; // если не подходит = оставляем как есть 
 
    var curNum = +match[1]; 
    return { // иначе обновляем min и max 
      min: acc.min > curNum ? curNum : acc.min, 
      max: acc.max < curNum ? curNum : acc.max 
    } 
  }, { 
    min: Infinity, 
    max: -Infinity 
  }) 
console.log(a);

READ ALSO
Функция поиска из таблицы

Функция поиска из таблицы

Как реализовать поиск(функцию) по полю Mo_id чтобы не все данные отображались в таблице, а только то, что ищемВ данном случае у меня отображаются...

113
Элементы карусели не помещаются в div

Элементы карусели не помещаются в div

Всем привет! Ситуация следующая: пользуюсь MaterializeCSS Хочу сделать карусель из карточекВ принципе, все работает, но есть проблема: сами карточки...

127
Jquery - порядок вставки элементов

Jquery - порядок вставки элементов

Почему </details> вставляется раньше чем user?

110