преобразование пикаба Лодаша в Javascript - PullRequest
0 голосов
/ 18 февраля 2019

как я могу сделать функцию выбора Лодаша в JavaScript?Я нашел следующее в "Вам не нужен lodash"

function pickBy(object) {
    const obj = {};
    for (const key in object) {
        if (object[key] !== null && object[key] !== false && object[key] !== undefined) {
            obj[key] = object[key];
        }
    }
    return obj;
} 

, но я удивляюсь другим реализациям

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Чтобы создать _.pickBy(), вы можете использовать for...of с Object.entries().Если предикат возвращает верный ответ для значения, присвойте ключ и значение результирующему объекту.

Примечание: если вам требуется _.pickBy(), и вы не хотите использовать весь пакет lodash, вы можете импортироватьмодуль pickBy .

function pickBy(object, predicate = v => v) {
  const obj = {};
  for (const [key, value] of Object.entries(object)) {
    if (predicate(value)) obj[key] = value;
  }
  return obj;
}

console.log(pickBy({ a: 1, b: 0, c: 3 }));
console.log(pickBy({ a: 1, b: 0, c: 3 }, v => v < 3 ));

В наши дни вы можете получать записи, фильтровать их по значению и конвертировать обратно в объект с помощью Object.fromEntries():

const pickBy = (object, predicate = v => v) =>
  Object.fromEntries(Object.entries(object).filter(([, v]) => predicate(v)))

console.log(pickBy({ a: 1, b: 0, c: 3 }));
console.log(pickBy({ a: 1, b: 0, c: 3 }, v => v < 3 ));
0 голосов
/ 18 февраля 2019

Существо

var object = { 'a': 1, 'b': '2', 'c': 3 };

и обратный вызов метода, который применяется только к значениям объекта (_.isNumber):

Object.keys(obj).reduce((prev, x) => callback(obj[x]) ? { ...prev, [x] : obj[x] } : prev , {});
0 голосов
/ 18 февраля 2019

Вы можете добавить функцию предиката, так как _.pickBy описывает и использует записи, фильтрует данные и создает новый объект.

function pickBy(object, predicate = v => v) {
    return Object.assign(
        ...Object
            .entries(object)
            .filter(([, v]) => predicate(v))
            .map(([k, v]) => ({ [k]: v }))
    );
}
...