Javascript фильтр, но возвращает ключи, а не значения - PullRequest
0 голосов
/ 13 июня 2019

Эта функция работает нормально, но я не хочу, чтобы она возвращала значения, кроме клавиш:

const search = [2342,1900,1800,2310]

search = search.filter(function (el) { return el > 2200; });

Таким образом, он должен вернуть [0,3], а не [2342,2310]

Ответы [ 4 ]

3 голосов
/ 13 июня 2019

Вы можете получить ключи, затем использовать их для доступа к массиву и выполнить фильтрацию на основе этого:

const search = [2342,1900,1800,2310];

const result = Object.keys(search)
  .filter(key => search[key] > 2200)
  .map(key => Number(key))
  
console.dir(result)

Или, для чего-то более интересного:

const search = [2342,1900,1800,2310];

const pipe = (...fns) => x => fns.reduce((v, f) => f(v), x);
const filter = f => a => a.filter(f);
const map = f => a => a.map(f);
const toPairs = o => Object.keys(o)
  .map(k => [k, o[k]]);  
const take = i => a => a[i];
const gte = a => b => b >= a;
const toNumber = x => Number(x);

const bigEnough = gte(2200);
const itemOneIsBigEnough = pipe(
  take(1),
  bigEnough
);
const getTheFirstItemAsANumber = pipe(take(0), toNumber);

const doTheThing = pipe(
  toPairs,
  filter(
    itemOneIsBigEnough
  ),
  map(getTheFirstItemAsANumber),
);


const result = doTheThing(search);
console.dir(result);
3 голосов
/ 13 июня 2019

Вы можете получить ключи и отфильтровать по значению.

const
    search = [2342, 1900, 1800, 2310],
    indices = [...search.keys()].filter(i => search[i] > 2200);

console.log(indices);
3 голосов
/ 13 июня 2019

Самый простой способ - просто Array#reduce пунктов:

const search = [2342,1900,1800,2310]

const result = search.reduce(function (result, el, index) {
  if(el > 2200) {
    result.push(index);
  }
  return result;
}, []);

console.log(result);
1 голос
/ 13 июня 2019

let search = [2342, 1900, 1800, 2310]

search = search.map((el, i) => {
  if (el > 2200) return i;
}).filter(el => el !== undefined);

console.log(search);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...