Не работает условный оператор “или ||”

217
02 мая 2018, 04:57
let user = {date:'111'};
let user1 = {date:'222'};
let user2 = {date:'113'};
let user3 = {date:'333'};
let arr = [user,user1, user2, user3];
let vip =[];
let as =[];
let low =[];
let zero = [];
let sep = function (obj,i,arr) {
    let k = +obj.date;
  if(k === 112 || 122 || 132 || 111 || 211 || 311 || 121 || 321 || 331 || 221 ){
      vip.push(obj)
  }else if (k === 212 || 222 || 232) {
      as.push(obj)
  }else if (k === 312 || 322 || 113 || 213 || 123 || 223 || 133 || 233){
      low.push(obj)
  } else if (k === 333 || 323 || 332) {
      zero.push(obj)
  }
};
arr.forEach(sep);
console.log('vip-->', vip, 'as--->', as, 'low--->',low, 'zero--->', zero);

У меня условия или проваливаются... и все юзеры попадают в массив, указанный в первом условии. А нужно, чтобы распределялись в зависимости от своего значения. Что я сделал не так ? Или может подскажете, как можно это сделать правильнее - красивее...

Answer 1

Сейчас идет сравнение «k === 112 или 122», а не *«k === 112 или k === 122», как вам хочется. 122 всегда эквивалентно true. На этом if заканчивается, и код переходит к vip.push(obj).

Нужно так:

if ((k === 112) || (k === 122) || (k === 132) и т.д.

Еще лучше (проще читать и сложнее ошибиться) - создать массивы и проверять, содержится ли k в одном из них:

var array1 = [112, 122, 132, 111, 211, 311, 121, 321, 331, 221]; 
var array2 = [.....]
if (array1.includes(k)) {
  vip.push(obj)
}
else if (array2.includes(k) {
}

Элементы массива и k нужно привести к одному типу.

Answer 2

У вас неверно написаны условия. нужно так

k === 113 || k === 122 || k === 132...

READ ALSO
Зачем библиотеки обертывают в (function() {…})()?

Зачем библиотеки обертывают в (function() {…})()?

Зачем библиотеки обертывают в (function() {

196
Кастомный балун для карты

Кастомный балун для карты

Всем приветЗадача такая

180
Ошибка с шифром Виженера - JavaScript

Ошибка с шифром Виженера - JavaScript

Делаю шифр ВигенаЯ не могу понять почему при введении ключа и нажатия шифрования или расшифрования срабатывает alert("Ключ не содержит буквы");

255