Znajdź obiekt, według zakresu wartości

0

Witam,
załóżmy, że mam tablicę:

const x = [{
        from: 0,
        to: 100,
        color: "red",
    },
    {
        from: 100,
        to: 200,
        color: "blue"
    }
]

i zmienną:

const a = 50

i teraz chciałbym sprawdzić, jaki kolor jej odpowiada na podstawie zakresu, w jakim się znajduje. Kolor wyjdzie czerwony, bo jest większa od 0 (from) i mniejsza od 100 (to).

1

w Scali bym napisał tak:

x.filter(c => c.from <= a && a <c.to)

Jak znajdę czas to przepiszę do JSa

Update

const x = [{
    from: 0,
    to: 100,
    color: "red",
  },
  {
    from: 100,
    to: 200,
    color: "blue"
  }
]
const a = 50
const color = x
  .filter(c => c.from <= a && a < c.to)
  .map(c => c.color)[0]
console.log(color)
1

Można tak:

const a = 50 ;

const x = [{
        from: 0,
        to: 100,
        color: "red",
    },
    {
        from: 100,
        to: 200,
        color: "blue"
    }
]

let res = x.forEach ( (item)=>{  
  if ( ( a >= item.from ) && ( a <= item.to ) ){
    console.log ( 'Element spełnia warunek', item );
  }
} );

Lub tak:

<script>
const a = 50 ;

const x = [{
        from: 0,
        to: 100,
        color: "red",
    },
    {
        from: 100,
        to: 200,
        color: "blue"
    }
]

let res = x.filter ( (item)=>{  
  if ( ( a >= item.from ) && ( a <= item.to ) ){
    return true;
  } else {
    return false
  }
} );

console.log ( 'Wynik:', res );
</script>
3
const color = x
  .filter(c => c.from <= a && a < c.to)
  .map(c => c.color)[0]

jeśli zależy nam tylko na pierwszym elemencie, można użyć .find zamiast .filter.

const color = x.find(c => c.from <= a && a < c.to).color;

jednak nawet używając .filter nie musimy używać map:

const color = x.filter(c => c.from <= a && a < c.to)[0].color;
0

Przepuściłem wasze propozycje przez testy wydajności i oczywiście wyszło, że

const color = x.find(c => c.from <= a && a < c.to).color;

jest najszybsze. Tego właśnie potrzebowałem dziękuję.

https://jsbench.me/ihl5b0bhd1/1

1 użytkowników online, w tym zalogowanych: 0, gości: 1